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



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

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

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

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

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

  1. 有一种更简单的方法可以使用HTTP Cookie管理器获取JSESSIONID cookie值

    • 将下一行添加到用户属性文件

      CookieManager.save.cookies=true
      
    • 重新启动JMeter以取货
    • 完成后,您将能够在需要时${COOKIE_JSESSIONID}访问cookie值
  2. 为了使它在第二个线程组中可用,您需要使用 __setProperty(( 函数将其转换为 JMeter 属性,如下所示:

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

    完成后,您将能够使用 __P(( 函数访问第二个线程组中的值${__P(JSESSIONID,)}

供参考。它的工作原理:

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

我在第一个线程组中编写了一个小 bsh,用于提取 cookie 并将其存储在不同的变量中。 从第一个线程组中提取 Cookie

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

在第二个线程组中应用 Cookie

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

最新更新