首页 > 解决方案 > 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]:

在此处输入图像描述

标签: seleniumjmeterintegration

解决方案


为了传递“会话”,您需要将所有 cookie 从 JMeter 的HTTP Cookie 管理器复制到 Selenium 会话中。

这可以直接在 WebDriver Sampler 中完成,如下所示:

  1. JSR223 PostProcessor添加为要复制哪个会话的请求的子项
  2. 将以下代码放入“脚本”区域

    vars.putObject('cookieManager', sampler.getCookieManager())
    

    它将 HTTP Cookie 管理器的当前状态存储到JMeter 变量中

  3. 在 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)
    }
    

推荐阅读