如何在Jmeter中的两个线程组之间共享JSessionID

时间:2018-09-04 08:00:50

标签: java jmeter performance-testing load-testing blazemeter

对于我的JMeter测试,我想登录一次,然后与多线程同时浏览应用程序中的报告。 我创建了两个连续运行的线程组,第一个线程组包含设置为与一个线程一起运行的登录HTTP请求。第二个线程组包含我的应用程序中每个报告的HTTP请求,并设置为运行50个线程。

该应用程序已部署在Weblogic服务器上,并且应用程序会话是有状态的。

我想在成功登录后通过weblogic与第二个线程组HTTP请求共享由第一个线程组通过weblogic生成的JsessionID。

问题在于第二个线程组中每个HTTP请求的JsessionID是唯一的,并且与第一个线程组中登录HTTP请求的JsessionID都不同。结果,应用程序无法调用对呼叫进行身份验证。

JsessionID嵌入在标头内的cookie中。我尝试使用正则表达式提取器从第一个线程组的HTTP请求中提取它(请参见附图),并在HTTP Cookie Manager中定义它,但是问题仍然存在。 Regular Expression Extractor config

2 个答案:

答案 0 :(得分:2)

  1. 有一种使用HTTP Cookie Manager

    来获取JSESSIONID cookie值的简便方法。
    • 将下一行添加到 user.properties 文件

      CookieManager.save.cookies=true
      
    • 重新启动JMeter以获取财产
    • 完成后,您将可以在需要时以${COOKIE_JSESSIONID}的身份访问Cookie值
  2. 要使其在第二个线程组中可用,您需要使用__setProperty() function将其转换为JMeter属性,例如:

    ${__setProperty(JSESSIONID,${COOKIE_JSESSIONID},)}
    

    完成后,您将可以使用__P() function作为${__P(JSESSIONID,)}

  3. 访问第二个线程组中的值。

答案 1 :(得分:0)

供参考。它的工作原理:

我找到了另一种方法来完成测试,并通过第一个线程组中生成的cookie来成功抑制第二个线程组中生成的cookie,从而绕过登录身份验证。

我在第一个线程组中写了一个小bsh来提取cookie并将其存储在不同的变量中。 Extract cookies from the first thread group

然后我在第二个线程组中编写了另一个bsh,以通过应用生成的变量来抑制cookie

Applying cookies in the second thread group

现在我可以登录一次,并使用共享相同SessionID的多线程浏览报告。