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

jMeter issue when using Cookie manager and Regular expression extractor

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

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

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

结构

详情:

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

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

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

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

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

我试过的:

任何 help/ideas 都表示赞赏。我已经尝试解决这个问题大约一个小时了,我想我一定遗漏了一些非常简单的东西。

好的,大约 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);