我已经准备好具有功能流程的Selenium自动化脚本,现在我想将这些脚本与JMeter集成以进行负载测试。
那可能吗?
如果是这样,如何将两者融合?
我的首要目标是使用硒运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。
JUnit请求采样器
如果您想重用已经自动化的(Java)Selenium场景,而不是为WebDriver Sampler重写JS脚本,则以这种方式运行Selenium测试可能会有用。
Selenium RC
1.1。下载Selenium Java客户端库,并放入selenium-java-${version}.jarJMeter类路径,例如%JMETER_HOME%/lib/。
1.2。Selenium服务器应已启动并正在侦听:
java -jar selenium-server-standalone-${version}.jar
1.3。将硒测试计划导出为.jar并将其保存到%JMETER_HOME%/lib/junit/。
注意:您的测试类应该扩展,TestCase或者SeleneseTestCase允许JMeter选择该测试计划,测试用例的名称应以“ test”开头。
注意:默认情况下SeleneseTestCase扩展JUnit 3.x TestCase,并且还SeleneseTestCase希望外部Selenium服务器正在运行。
2.1。在JMeter测试计划中,添加JUnit Request sampler。
设置Class Name根据一个从Selenium测试计划。
设置Test Method为测试即将运行。
默认保留其他参数。
在此处输入图片说明
JUnit 3.x与4.x
JUnit Request Sampler可以同时处理JUnit3和JUnit4样式的类和方法。要将Sampler设置为搜索JUnit 4测试(@Test注释),请Search for Junit4 annotations (instead of JUnit 3)选中上面设置中的复选框。
可以识别以下JUnit4批注:
@Test-用于查找测试方法和类。支持“期望”和“超时”属性。
@Before-与JUnit3中的setUp()相同@After-
与JUnit3
@BeforeClass中的tearDown()相同,@AfterClass- 作为测试方法,因此它们可以根据需要独立运行
JUnit请求采样器的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();
}
}
Selenium WebDriver
这种情况是下面另一个答案中提到的WebDriver Sampler的替代方法。
先决条件
Selenium RC案例的唯一区别是Selenium设置准备工作:
1.1。下载并放入selenium-server-standalone-${version}.jarJMeter类路径,例如%JMETER_HOME%/lib/。
注意:无需启动Selenium服务器。
所有其他步骤与上述方案中的步骤相同。
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();
}
}
BeanShell采样器
在这种情况下,硒测试场景直接在JMeter的BeanShell Sampler中执行。
Selenium设置的准备工作与上述情况完全相同:下载Selenium库,放入JMeter类路径,启动Selenium服务器(对于Selenium RC)。
将您的硒测试方案放入BeanShell Sampler:
Selenium RC
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;
Selenium WebDriver
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采样器+ Groovy
在这种情况下,硒测试方案是通过JSR223 Sampler + Groovy执行的。
对于性能考虑这种方法似乎比使用上述的BeanShell取样更优选的。
2.1。下载最新的Groovy二进制发行版;
2.2。groovy-all-${VERSION}.jar从发行版的“可嵌入”文件夹中复制并拖放到%JMETER_HOME%/lib/;
2.3。重新启动JMeter。
3.1。将JSR233采样器添加到线程组;
3.2。设置Script Language为groovy采样器的设置;
3.3。将您的硒测试场景放入Script一节(将接受Java代码):
Selenium RC
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;
Selenium WebDriver
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采样器案例的常见说明:
.bsh / .groovy
文件,而不是直接在采样器中使用Beanshell / Groovy
代码进行密集测试。IsSuccess =STATUS
或SampleResult.setSuccessful(STATUS)
,请参见上面的代码),而无需使用响应声明。通过将selenium脚本导出到jar文件并放入%Jmeter_Home%/lib/junit文件夹,我已经将所有selenium脚本与Jmeter集成,但当我试图使用junit请求采样器在Jmeter中执行这些脚本时,它显示错误:
当我试图用selenium运行脚本时,我得到以下错误 线程“main”org.openqa.selenium.webdriverexception:java.io.filenotfoundexception:d:\shantu!!!!!!!(系统找不到指定的文件)生成信息:版本:'2.49.1',修订:'7203E46',时间:'2016-01-21 17:35:35'系统信息:主机:'GHIJK
问题内容: 我正在尝试在Jmeter SetUp线程中运行几个SQL脚本。是否可以通过Jmeter从.SQL文件运行SQL代码,以便我可以在执行其他线程之前初始化数据库。我只是不想破坏我的代码,并使用JDBC连接和JDBC请求在Jmeter中复制/粘贴代码。谢谢! 问题答案: __FileToString()函数似乎是您要找的东西,您可以将其放入JDBC Request 采样器中,并在其中指定.s
当我尝试在selenium代码中执行java脚本时,我得到了以下错误。 错误:响应消息:javax.script.scriptException:源文件:内联计算:import org.openqa.selenium.by;导入org.openqa.selenium.WebDriver;导入组织。...'':executor.Executescript(“document.getElementBy
其中test.py为: 我为python、geckdodriver和firefox授予了整个lib目录的权限,以便在IIS_IUSRS(使用Windows)下进行完全控制。 Geckodriver的日志: 产生错误: 文件“C:\inetpub\wwwroot\jobdescription\test.py”,第13行,在driver=webdriver.firefox(firefox_option
出于学习目的,我正在尝试在GCP上安装和设置我自己的Kubernetes集群。 我想在GCP上为我的实例提供一个引导脚本。 这是我的config 我在应用terraform时遇到了这个问题 错误:无法打开脚本“sudo apt get update” sudo apt-get安装 apt-transverage-https ca-证书 curl gnupg-Agent software-Prope