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

How to share JSessionID between two thread groups in Jmeter

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

应用程序部署在 weblogic 服务器上,应用程序会话是有状态的。

我想在登录成功后通过weblogic将第一个线程组生成的JsessionID共享给第二个线程组HTTP Requests

问题在于第二个线程组中每个 HTTP 请求的 JsessionID 都是唯一的,并且与第一个线程组中登录 HTTP 请求的 JsessionID 不同。因此,应用程序无法调用验证调用。

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

  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. 访问第二个线程组中的值

供参考。有效:

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

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

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

Applying cookies in the second thread group

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