jMeter-硒整合

时间:2018-12-31 08:22:51

标签: selenium jmeter integration

我已经编写了jMeter测试用例,它有登录请求和一些对表的POST请求。 现在,我要测量页面的渲染时间(POSTS的响应)。 我想使用硒,所以我读: Running Selenium scripts with JMeter

问题是我希望Selenium使用与jMeter已经处理过的登录相同的会话(换句话说:已经登录)。 我该如何存档?

我的TestPlan:

enter image description here

[更新] @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();

enter image description here

{UPDATE 2}

好吧,我认为所有线程组中的Cookies都存在问题。 我的每个请求都没有[cookies]:

enter image description here

1 个答案:

答案 0 :(得分:1)

为了通过“会话”,您需要将JMeter的HTTP Cookie Manager中的所有cookie复制到Selenium会话中。

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

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

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

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

  3. 在WebDriver采样器中,您可以使用以下方法使用WDS.browser.manage().addCookie()函数从HTTP Cookie管理器复制cookie并将其添加到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)
    }