对于我的JMeter测试,我想登录一次,然后与多线程同时浏览应用程序中的报告。 我创建了两个连续运行的线程组,第一个线程组包含设置为使用一个线程运行的登录 HTTP 请求。第二个线程组包含应用程序中每个报表的 HTTP 请求,并设置为使用 50 个线程运行。
应用程序部署在 Weblogic 服务器上,并且应用程序会话是有状态的。
我想在成功登录后通过weblogic与第二个线程组HTTP请求共享第一个线程组生成的JsessionID。
问题是第二个线程组中每个 HTTP 请求的 JsessionID都是唯一的,并且都不同于第一个线程组中登录 HTTP 请求的 JsessionID。因此,应用程序无法调用身份验证调用。
JsessionID 嵌入在标头内的 cookie 中。我尝试使用正则表达式提取器(见附图(从第一个线程组中的 HTTP 请求中提取它,并在 HTTP Cookie 管理器中定义它,但问题仍然存在。 正则表达式提取器配置
-
有一种更简单的方法可以使用HTTP Cookie管理器获取JSESSIONID cookie值
-
将下一行添加到用户属性文件
CookieManager.save.cookies=true
- 重新启动JMeter以取货
- 完成后,您将能够在需要时
${COOKIE_JSESSIONID}
访问cookie值
-
-
为了使它在第二个线程组中可用,您需要使用 __setProperty(( 函数将其转换为 JMeter 属性,如下所示:
${__setProperty(JSESSIONID,${COOKIE_JSESSIONID},)}
完成后,您将能够使用 __P(( 函数访问第二个线程组中的值
${__P(JSESSIONID,)}
供参考。它的工作原理:
我找到了一种不同的方法来完成我的测试,并成功地将第二个线程组中生成的 cookie 抑制为第一个线程组中生成的 cookie,以绕过登录身份验证。
我在第一个线程组中编写了一个小 bsh,用于提取 cookie 并将其存储在不同的变量中。 从第一个线程组中提取 Cookie
然后我在第二个线程组中编写了另一个 bsh 以通过应用生成的变量来抑制 cookie
在第二个线程组中应用 Cookie
现在,我可以登录一次,并使用共享同一 SessionID 的多线程浏览报告。