selenium - jMeter - 硒集成
问题描述
我已经编写了 jMeter 测试用例,它有登录请求和一些对我的表的 POST 请求。现在我想测量页面的渲染时间(帖子的响应)。我想使用 Selenium,所以我阅读了: Running Selenium scripts with JMeter
问题是我希望 Selenium 使用相同的会话(换句话说:已经登录),因为登录已经由 jMeter 处理。我怎样才能存档呢?
我的测试计划:
[更新]@Dmitri T
感谢您的回答!我按照你的建议做了,但还是不行。也许我做错了什么,但在 Selenium 打开浏览器后仍然会进入登录页面。我将 JSR223 PostProcessor 放在我的 LOGIN POST 请求下,这是我的 WebDriver Sampler:
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.sampleResult.getLatency();
WDS.log.info("Sample started");
WDS.browser.get(WDS.parameters);
WDS.log.info("LOGGING INTO: " + (WDS.parameters))
var cookieManager = WDS.vars.getObject('cookieManager')
for (var i=0; i < cookieManager.getCookieCount(); i++) {
var jmeterCookie = cookieManager.getCookies().get(i)
var seleniumCookie = new org.openqa.selenium.Cookie(jmeterCookie.name, jmeterCookie.value, jmeterCookie.domain, jmeterCookie.path, java.util.Date.from(java. time.Instant.ofEpochMilli(jmeterCookie.expiresMillis)), jmeterCookie.secure)
WDS.browser.manage().addCookie(seleniumCookie)
}
java.lang.Thread.sleep(5000)
WDS.sampleResult.sampleEnd();
{更新 2}
好的,我认为所有线程组中的 Cookie 都有问题。我对每个请求都有 [没有 cookie]:
解决方案
为了传递“会话”,您需要将所有 cookie 从 JMeter 的HTTP Cookie 管理器复制到 Selenium 会话中。
这可以直接在 WebDriver Sampler 中完成,如下所示:
- 将JSR223 PostProcessor添加为要复制哪个会话的请求的子项
将以下代码放入“脚本”区域
vars.putObject('cookieManager', sampler.getCookieManager())
它将 HTTP Cookie 管理器的当前状态存储到JMeter 变量中
在 WebDriver Sampler 中,您可以从 HTTP Cookie 管理器复制 cookie 并使用WDS.browser.manage().addCookie()函数将它们添加到 WebDriver 实例,如下所示:
var cookieManager = WDS.vars.getObject('cookieManager') for (var i=0; i < cookieManager.getCookieCount(); i++) { var jmeterCookie = cookieManager.getCookies().get(i) var seleniumCookie = new org.openqa.selenium.Cookie(jmeterCookie.name, jmeterCookie.value, jmeterCookie.domain, jmeterCookie.path, java.util.Date.from(java.time.Instant.ofEpochMilli(jmeterCookie.expiresMillis)), jmeterCookie.secure) WDS.browser.manage().addCookie(seleniumCookie) }
推荐阅读
- python - Pytest 未检测到 FizzBuzzTest.py
- php - 无法使用 DateTime::createFromFormat 提取年份
- php - 添加更新或删除 WooCommerce 运输订单项目
- c# - 如何通过 c# rest-api 下载或克隆我的 bitbucket 服务器?
- python - 如何在 Bokeh 上创建动态标签集以避免文本重叠?
- postgresql - RDS Postgres DB IAM generate_db_auth_token 不工作
- javascript - 如何通过输入值检查数组值?
- python-3.x - ModuleNotFoundError 使用 items.py
- java - 如何将列表转换为地图
>> 使用 java lambda? - php - 从表单字段解析 Laravel 变量