使用 JMeter 运行 Selenium 脚本JUnit Request Sampler豆壳采样器JSR223 采样器 + 时髦
我已经为Selenium自动化脚本准备好了功能流,现在我想将这些脚本与JMeter集成以进行负载测试。
这可能吗?
如果是这样,如何整合两者?
我的第一个目标是使用selenium运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。
我已经为Selenium自动化脚本准备好了功能流,现在我想将这些脚本与JMeter集成以进行负载测试。
这可能吗?
如果是这样,如何整合两者?
我的第一个目标是使用selenium运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。
以下是从JMeter运行Selenium测试用例的可能方法:
如果你想重用已经自动化(Java)的Selenium场景,而不是为WebDriver Sampler重写JS脚本,以这种方式运行Selenium测试可能很有用。
准备硒测试项目和设置。
1.1. 下载 Selenium Java 客户端库并放到 JMeter 类路径,例如 .
1.2. 硒服务器应该启动并监听:selenium-java-${version}.jar
%JMETER_HOME%/lib/
java -jar selenium-server-standalone-${version}.jar
1.3. 将硒测试计划导出为.jar并将其保存到 .%JMETER_HOME%/lib/junit/
注意:你的测试类应该扩展或允许JMeter拿起这个测试计划,测试用例的名称应该以“test”开头)。
注意:默认情况下扩展 JUnit 3.x ,还期望外部 Selenium 服务器正在运行。TestCase
SeleneseTestCase
SeleneseTestCase
TestCase
SeleneseTestCase
配置 JUnit 请求采样器
2.1. 在 JMeter 测试计划中,添加 JUnit 请求采样器。
根据硒测试计划中的一个设置。
设置为即将运行的测试。
默认情况下保留其他参数。Class Name
Test Method
JUnit 3.x 与 4.x
JUnit Request Sampler 可以处理 JUnit3 和 JUnit4 样式的类和方法。要将采样器设置为搜索 JUnit 4 测试(注释)复选框,请选中上述设置中的复选框。
可以识别以下 JUnit4 注释:@Test
Search for Junit4 annotations (instead of JUnit 3)
@Test - 用于查找测试方法和类。支持“预期”和“超时”属性。
@Before - 与 JUnit3
@After 中的 setUp() 相同 - 与 JUnit3
@BeforeClass中的 tearDown() 相同,@AfterClass - 被视为测试方法,以便它们可以根据需要独立运行
您已准备好使用 JMeter 开始您的硒测试。
JUnit Request sampler 的 Java 代码:
JUnit 3.x
package com.example.tests;
import com.thoughtworks.selenium.*;
public class selenium extends SeleneseTestCase {
private static Selenium selenium;
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
selenium.start();
selenium.windowMaximize();
}
public void testSelenium() throws Exception {
selenium.open("/");
selenium.waitForPageToLoad("30000");
Assert.assertEquals("Google", selenium.getTitle());
}
public void tearDown() throws Exception {
selenium.close();
}
}
JUnit 4.x
用 JUnit 4 编写的测试脚本使用 JUnit 注释:
package com.example.tests;
import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class selenium extends SeleneseTestCase {
private static Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
selenium.start();
selenium.windowMaximize();
}
@Test
public void testSelenium() throws Exception {
selenium.open("/");
selenium.waitForPageToLoad("30000");
Assert.assertEquals("Google", selenium.getTitle());
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
}
这种情况是下面另一个答案中提到的WebDriver Sampler的替代方法。
先决条件
与硒RC情况的唯一区别是硒设置准备:
1.1. 下载并放到 JMeter 类路径,例如 .
注意:无需启动硒服务器。selenium-server-standalone-${version}.jar
%JMETER_HOME%/lib/
所有其他步骤与上述方案中的步骤相同。
package org.openqa.selenium.example;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;
import org.openqa.selenium.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
public class selenium extends TestCase {
public static WebDriver driver;
@Before
public void setUp() {
FirefoxProfile profile = new FirefoxProfile();
driver = new FirefoxDriver(profile);
}
@Test
public void testSelenium() throws Exception {
driver.get("http://www.google.com/");
Assert.assertEquals("Google", driver.getTitle());
}
@After
public void tearDown() {
driver.quit();
}
}
Upd.
另一个好点和分步指南使用硒+ JUnit + JMeter捆绑包:
在这种情况下,硒测试场景直接在JMeter的BeanShell Sampler中执行。
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
Boolean result = true;
try {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.google.com/");
selenium.start();
selenium.windowMaximize();
selenium.open("/");
selenium.waitForPageToLoad("30000");
if (!selenium.isTextPresent("Google")) result = false;
} catch (Exception ex) {
ex.printStackTrace();
IsSuccess = false;
ResponseCode = "500";
ResponseMessage = ex.getMessage();
} finally {
selenium.stop();
}
IsSuccess = result;
return result;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
Boolean result = true;
try {
driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver.get("http://www.google.com/");
if (!driver.getTitle().contains("Google")) result = false;
} catch (Exception ex) {
ex.printStackTrace();
IsSuccess = false;
ResponseCode = "500";
ResponseMessage = ex.getMessage();
} finally {
driver.quit();
}
IsSuccess = result;
return result;
在这种情况下,硒测试场景通过JSR223 Sampler + Groovy执行。
出于性能考虑,这种方法似乎比使用上面描述的BeanShell Sampler更可取。
添加对 JSR223 采样器的 Groovy 支持:
2.1. 下载最新的Groovy二进制发行版;
2.2. 从分发的“可嵌入”文件夹复制并将其拖放到 ;
2.3. 重新启动 JMeter。groovy-all-${VERSION}.jar
%JMETER_HOME%/lib/
配置 JSR233 采样器:
3.1. 将 JSR233 采样器添加到线程组;
3.2. 在采样器的设置中设置为;
3.3. 把你的硒测试场景放到一个部分(Java代码将被接受):Script Language
groovy
Script
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
Boolean result = true;
try {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.google.com/");
selenium.start();
selenium.windowMaximize();
selenium.open("/");
selenium.waitForPageToLoad("30000");
if (!selenium.isTextPresent("Google")) result = false;
} catch (Exception ex) {
ex.printStackTrace();
log.error(ex.getMessage());
SampleResult.setSuccessful(false);
SampleResult.setResponseCode("500");
SampleResult.setResponseMessage(ex.getMessage());
} finally {
selenium.stop();
}
SampleResult.setSuccessful(result);
return result;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
Boolean result = true;
try {
driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver.get("http://www.google.com/");
if (!driver.getTitle().contains("Google")) result = false;
} catch (Exception ex) {
ex.printStackTrace();
log.error(ex.getMessage());
SampleResult.setSuccessful(false);
SampleResult.setResponseCode("500");
SampleResult.setResponseMessage(ex.getMessage());
} finally {
driver.quit();
}
SampleResult.setSuccessful(result);
return result;
BeanShell / JSR223 Sampler案例的常见说明:
Script file
IsSuccess = STATUS
SampleResult.setSuccessful(STATUS)
有更简单的方法来运行Selenium脚本。
添加此代码
var pkg = JavaImporter(org.openqa.selenium)
var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait)
var wait = new support_ui.WebDriverWait(WDS.browser, 5000)
WDS.sampleResult.sampleStart()
WDS.log.info("Opening page...");
WDS.browser.get('http://duckduckgo.com')
var searchField = WDS.browser.findElement(pkg.By.id('search_form_input_homepage'))
searchField.click()
WDS.log.info("Clicked search field")
searchField.sendKeys(['blazemeter'])
WDS.log.info("Inserted blazemeter keyword")
var button = WDS.browser.findElement(pkg.By.id('search_button_homepage'))
button.click()
WDS.log.info("Clicked search button");
var link = WDS.browser.findElement(pkg.By.ByCssSelector('#r1-0 > div.links_main > h2 > a.large > b'))
link.click()
WDS.log.info("Clicked blazemeter link");
WDS.log.info(WDS.name + ' finishing...');
WDS.sampleResult.sampleEnd()
运行测试
有关代码语法和最佳实践的更多详细信息,您可以尝试将Selenium与JMeter的WebDriver Sampler文章一起使用。