0

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

这里的问题是,我为整个控制器设置了 cookie 管理器,而不是获取实际数据,而是在我的 cookie“.authToken=${auth}”中获取变量的名称。

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

结构

  • 线
    • 缓存管理器
    • Cookie 管理器(Cookie 政策:兼容性;实施:HC3)
    • 控制器
      • Http请求
        • 正则表达式提取器
      • Http请求(我需要使用上面在Request Cookie中提取的值)
      • Http请求(这里我需要在Request Cookie中使用相同的值)
      • Http请求(这里我需要在Request Cookie中使用相同的值)
      • ......

细节:

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

很确定我已经正确配置了变量名和正则表达式中的所有内容,因为它适用于非常特殊的情况:

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

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

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

我尝试了什么:

  • 将 http 请求拆分为 2 个不同的控制器并使用 2 个不同的 Cookie 管理器 - 得到“${auth}”而不是某个值
  • 在控制器上方定义用户变量,然后使用“应用到:Jmeter 变量”选项 - 再次获得字符串“${auth}”而不是某个值。
  • 将 Cookie 管理器移动到用于提取的 http 请求之后的位置 - 再次是“${auth}”而不是某个值
  • 设置不同的 cookie 策略(不是全部,但很少)
  • 在 jmeter.properties 中设置“CookieManager.save.cookies=true”(并且仍然为真)

任何帮助/想法表示赞赏。我一直试图弄清楚这个大约一个小时,我想我一定错过了一些非常简单的东西。

4

1 回答 1

0

好的,大约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);
于 2015-08-14T12:06:39.607 回答