当使用Cookie管理器和正则表达式提取器时,jMeter问题



所以基本上我需要从第一个http请求的报头响应中提取一个认证令牌,然后在第二次(以及所有以下)http请求cookie中使用提取的数据。

这里的问题是,我有cookie管理器设置为整个控制器,而不是获得实际的数据,我得到变量的名称在我的cookie ". authtoken =${auth}"。

我猜原因是当测试到达Cookie管理器时没有声明变量,但我希望jmeter足够聪明,可以在到达正则表达式提取器时声明变量。

  • 线程
    • 缓存管理器
    • Cookie管理器(Cookie Policy:compatibility;实现:HC3)
    • 控制器
      • Http请求
        • 正则表达式提取器
      • Http请求(我需要在请求Cookie中使用上面提取的值)
      • Http请求(我需要在请求Cookie中使用相同的值)
      • Http请求(我需要在请求Cookie中使用相同的值)

细节:

所有http请求都记录在实现HttpClient3.1

非常确定我已经正确配置了所有的变量名,正则表达式,因为它在一个非常特殊的情况下工作:

它似乎正确工作的唯一时间是当我在http请求中有Cookie管理器并禁用'主' Cookie管理器(整个控制器的一个)。然后它被正确提取,但这将是一个非常愚蠢的解决方案,这样一个基本的要求,我也有许多http请求(超过100),我需要使用提取的值。

Jmeter在正则表达式提取器声明变量之前不需要使用变量,我确保域是正确的,并且在之后第一次使用,它应该被提取。

我想到的另一个解决方案是拥有单独的线程,将它们链接并在它们之间发送变量,一旦提取数据就启动下一个线程,但这似乎有点太激烈了。

我尝试了什么:

  • 将http请求拆分为2个不同的控制器并使用2个不同的Cookie管理器-得到"${auth}"而不是一些值
  • 在控制器上定义用户变量,然后使用"Apply to: Jmeter variable"选项-再次得到字符串"${auth}"而不是一些值。
  • 将Cookie管理器移动到用于提取的http请求之后的位置-再次使用"${auth}"而不是一些值
  • 设置不同cookie的策略(不是全部,而是少数)
  • CookieManager.save设置"。Cookies =true"在jmeter中。

任何帮助/想法都是感激的。我花了大约一个小时想弄清楚这个问题,我想我一定错过了一些非常简单的东西。

好了,终于在大约2小时后解决了这个问题。

多亏了这篇文章,我才能够做我需要做的事情https://capacitas.wordpress.com/2013/06/11/thats-the-way-the-cookie-crumbles-jmeter-style-part-2/

简而言之:您需要使用beanshell预处理器并手动添加cookie下面是防止站点死亡的beanshell脚本:

import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;
CookieManager manager = sampler.getCookieManager();
Cookie cookie = new Cookie("CookieName", vars.get("YourExtractedVariable"), "Domain", "Path", false, 0);
manager.add(cookie);

最新更新