使用Cookie管理器和正则表达式提取器

时间:2015-08-14 09:20:43

标签: variables jmeter backtracking cookiemanager

所以基本上我需要从第一个http请求的头响应中提取一个auth令牌,然后在第二个(以及所有以下)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”(并且仍然为true)

感谢任何帮助/想法。我一直在努力解决这个问题大约一个小时,我想我一定会错过一些非常简单的事情。

1 个答案:

答案 0 :(得分: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);