使用 JMeter 运行 Selenium 脚本
我已经准备好了带有功能流程的 Selenium 自动化脚本,现在我想将这些脚本与 JMeter 集成以进行负载测试。
这可能吗?
如果是的话如何整合两者?
我的第一个目标是使用 selenium 运行自动化脚本,而不是在 jmeter 中运行这些脚本进行负载或性能测试。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
以下是从 JMeter 运行 Selenium 测试用例的可能方法:
JUnit Request Sampler
如果您想重用已经自动化的 (Java) Selenium 场景而不是为 WebDriver 采样器。
Selenium RC
准备 Selenium 测试项目和设置。
1.1。下载 Selenium Java 客户端库并将
selenium-java-${version}.jar
放入 JMeter 类路径,例如%JMETER_HOME%/lib/
。1.2. Selenium 服务器应该启动并监听:
1.3。将 Selenium 测试计划导出为 .jar 并将其保存到
%JMETER_HOME%/lib/junit/
。注意:您的测试类应该扩展
TestCase
或SeleneseTestCase
以允许JMeter选择此测试计划,测试用例的名称应该以“测试”开头)。注意: 默认情况下,
SeleneseTestCase
扩展了 JUnit 3.xTestCase
,而且SeleneseTestCase
也期望外部 Selenium 服务器正在运行。配置JUnit 请求采样器
2.1。在 JMeter 测试计划中添加 JUnit 请求采样器。
根据 Selenium 测试计划中的一个设置
类名称
。设置
测试方法
来测试即将运行的测试。其他参数默认即可。
JUnit 3.x 与 4.x
JUnit Request Sampler 可以处理 JUnit3 和 JUnit4 样式的类和方法。要将 Sampler 设置为搜索 JUnit 4 测试(
@Test
注释),请选中上面设置中的搜索 Junit4 注释(而不是 JUnit 3)
复选框。可以识别以下 JUnit4 注释:
<块引用>
@Test - 用于查找测试方法和类。支持“expected”和“timeout”属性。
@Before - 与 JUnit3 中的 setUp() 处理方式相同
@After - 与 JUnit3 中的tearDown() 处理方式相同
@BeforeClass、@AfterClass - 被视为测试方法,因此它们可以根据需要独立运行
您已准备好使用 JMeter 开始 Selenium 测试。
JUnit 请求采样器的 Java 代码:
JUnit 3.x
JUnit 4.x
用 JUnit 4 编写的测试脚本使用 JUnit 注释:
Selenium WebDriver
此案例是 WebDriver Sampler”。
先决条件
与 Selenium RC 案例的唯一区别是 Selenium 设置准备:
1.1。下载并将
selenium-server-standalone-${version}.jar
放入 JMeter 类路径,例如%JMETER_HOME%/lib/
。注意:无需启动 Selenium 服务器。
所有其他步骤与上述场景中的相同。
更新
使用 Selenium + JUnit + JMeter 捆绑包的另一个优点和分步指南:
BeanShell Sampler
在本例中,selenium 测试场景直接在 JMeter 的 BeanShell Sampler 中执行。
Selenium RC
Selenium WebDriver
JSR223 Sampler + Groovy
在本例中为 selenium测试场景通过 JSR223 采样器 + Groovy.
对于性能考虑,这种方法似乎比使用更可取BeanShell 采样器如上所述。
添加对 JSR223 Sampler 的 Groovy 支持:
2.1。 下载最新的 Groovy 二进制发行版;
2.2.从发行版的“embeddable”文件夹中复制 groovy-all-${VERSION}.jar 并将其拖放到
%JMETER_HOME%/lib/
;2.3.重新启动 JMeter。
配置 JSR233 采样器:
3.1。将 JSR233 Sampler 添加到线程组;
3.2.在采样器设置中将
脚本语言
设置为groovy
;3.3.将您的 selenium 测试场景放入
Script
部分(将接受 Java 代码):Selenium RC
Selenium WebDriver
BeanShell / JSR223 Sampler 案例的常见注释:
Script file
字段),而不是直接在采样器中使用 Beanshell / Groovy 代码进行密集测试。IsSuccess = STATUS
或SampleResult.setSuccessful(STATUS),参见上面的代码),而不使用响应断言。
Below are possible ways to run Selenium test-cases from JMeter:
JUnit Request Sampler
Running Selenium tests this way maybe useful if you want to re-use already automated (Java) Selenium scenarios instead of re-writing JS-scripts for WebDriver Sampler.
Selenium RC
Prepare Selenium test project and setup.
1.1. Download Selenium Java client libraries and put
selenium-java-${version}.jar
to JMeter classpath, e.g.%JMETER_HOME%/lib/
.1.2. Selenium server should be up and listening:
1.3. Export Selenium test-plan as .jar and save it to
%JMETER_HOME%/lib/junit/
.NOTE: Your test class should extend
TestCase
orSeleneseTestCase
to allow JMeter pick up this test plan, test case's name should start with "test").NOTE: By default
SeleneseTestCase
extends JUnit 3.xTestCase
, alsoSeleneseTestCase
expects external Selenium server to be running.Configure JUnit Request sampler
2.1. In JMeter test-plan add JUnit Request sampler.
Set
Class Name
according to one from the Selenium test plan.Set
Test Method
to test that is about to run.Leave other parameters by default.
JUnit 3.x vs. 4.x
JUnit Request Sampler can process both JUnit3- and JUnit4-style classes and methods. To set Sampler to search for JUnit 4 tests (
@Test
annotations) checkSearch for Junit4 annotations (instead of JUnit 3)
checkbox in settings above.The following JUnit4 annotations are recognized:
You are ready to start your Selenium test with JMeter.
Java code for JUnit Request sampler:
JUnit 3.x
JUnit 4.x
Test script written in JUnit 4 uses JUnit annotations:
Selenium WebDriver
This case is an alternative to WebDriver Sampler mentioned in another answer below.
Prerequisites
The only difference with Selenium RC case is Selenium setup preparation:
1.1. Download and put
selenium-server-standalone-${version}.jar
to JMeter classpath, e.g.%JMETER_HOME%/lib/
.NOTE: There is no need to start the Selenium server.
All the other steps are the same as in the scenario described above.
Upd.
Another good points and step-by-step guides to use Selenium + JUnit + JMeter bundle:
BeanShell Sampler
In this case selenium test-scenario is executed directly in JMeter's BeanShell Sampler.
Selenium RC
Selenium WebDriver
JSR223 Sampler + Groovy
In this case selenium test-scenario is executed via JSR223 Sampler + Groovy.
For performance considerations this approach seems to be more preferable than using BeanShell Sampler described above.
Add Groovy support for JSR223 Sampler:
2.1. download latest Groovy binary distribution;
2.2. copy
groovy-all-${VERSION}.jar
from “embeddable” folder of distribution and drop it to%JMETER_HOME%/lib/
;2.3. restart JMeter.
Configure JSR233 Sampler:
3.1. add JSR233 Sampler to Thread Group;
3.2. set
Script Language
togroovy
in sampler's settings;3.3. put your selenium test-scenario into
Script
section (Java code will be accepted):Selenium RC
Selenium WebDriver
Common notes for BeanShell / JSR223 Sampler cases:
Script file
field) instead of using Beanshell / Groovy code directly in sampler for intensive testing.IsSuccess = STATUS
orSampleResult.setSuccessful(STATUS)
, see code above), without using Response Assertion.有更简单的方法来运行 Selenium 脚本。
添加此代码
运行您的测试
有关代码语法和最佳实践的更多详细信息,您可以尝试将 Selenium 与 JMeter 的 WebDriver Sampler 结合使用一文。
There is easier way to run Selenium scripts.
Add this code
Run your test
For more detailed information about code syntax and best practises you can try Using Selenium with JMeter's WebDriver Sampler article.
不需要将 Selenium 与 JMeter 一起使用。 Selenium 脚本一次将获取一个浏览器实例。然而,JMeter 不使用浏览器的真实实例来生成负载。
请告诉我是否可以使用 Selenium 脚本从 UI 角度生成 5000 个 vuser 的负载。也许可以。但我们是说 Selenium 脚本现在需要同一系统上的 5000 个浏览器实例吗?测试仍然会运行还是会挂起系统? JMeter 也已经有很多作为记录器的选择。从“负载”测试的角度来看,它提供了出色的统计数据。
暂时,如果我们认为了解 Selenium 的用户不知道如何在 JMeter 中编写脚本,因此会出现学习曲线。但对于 JMeter 来说,这甚至不是真的。这是因为首先不需要创建逻辑序列或程序之类的东西。
There should not be a need to use Selenium with JMeter. Selenium script will take one instance of a browser at a time. Whereas, JMeter does not use a real instance of a browser to generate load.
Please let me know if Selenium script can be used to generate a load from UI standpoint for 5000 vusers. It probably can. But then are we saying that the Selenium script would now require 5000 instances of a browser on the same system? Will the test still run or hang the system instead? JMeter already has great options as a Recorder as well. It provides great stats from "load" testing standpoint.
For a moment if we think that users who know Selenium won't know how to script in JMeter and hence a learning curve. But in case of JMeter this is even not true. It's because there is no need to create something like a logical sequence or a program in the first place.
所以基本上你首先用selenium记录你的脚本,然后使用jmeter重新记录selenium测试用例。 :-)
http://codenaut.blogspot.com/2011/06/ Icefaces-load-testing.html
So basically you record your script with selenium first and then re-record the selenium test cases using jmeter. :-)
http://codenaut.blogspot.com/2011/06/icefaces-load-testing.html
虽然接受的答案确实对我来说非常有效,但 Selenium RC 已经过时了。这是更新后的 Selenium WebDriver 方法。
注意:可以从已接受的答案中重新使用该设置。
JUnit 请求采样器(Jupiter 测试代码)
JSR223 采样器 + Groovy
While the accepted answer did work for me perfectly, Selenium RC is outdated. So here's the updated Selenium WebDriver approach.
NOTE : The setup can be re-used from the accepted answer.
JUnit Request Sampler (Jupiter Test code)
JSR223 Sampler + Groovy