使用 Jmeter 2.12,什么可能导致 cookie 在 JMeter 循环控制器期间无法重置? 我已经尝试了我能想到的一切,但每次通过循环时,上次登录的 cookie 之一仍然存在。 它似乎并没有真正清除饼干。
以下是我如何组合我的循环:
Thread Group 1
-- Loop Controller (3x)
-- Simple Controller
-- HTTP Header Manager
-- HTTP Cookie Manger (with 'Clear cookies each iteration?' enabled)
-- BeanShell sampler - with code that tries to clear all cookies
-- HTTP /login (gets cookies and auth headers)
-- ... various HTTP Samplers ...
-- HTTP /logout
我尝试使用此代码添加 Beanshell 采样器(如上所示),但它似乎没有任何作用:
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.HeaderManager;
CookieManager cManager = sampler.getCookieManager();
cManager.clear();
HeaderManager hManager = sampler.getHeaderManager();
hManager.clear();
好的,我想出了问题所在。 尽管"HTTP Cookie管理器"有一个名为"每次迭代清除cookie"的选项,但它所说的"迭代"不包括循环控制器。 它所指的只是"线程组"迭代/循环。 这并不清楚,我浪费了半天的时间,直到我想通了。 如果复选框显示"清除每个线程组迭代的 cookie",就不会混淆。 非常令人失望。
- 循环控制器不增加迭代。您可以通过评估 vars.getIteration() Beanshell 代码行来测试它。迭代在线程组级别递增。要覆盖它,您可以在任何启用 Beanshell 的测试元素(采样器、前/后处理器、断言等)中调用 vars.incIteration() 方法。
-
用于清除 cookie 的 Beanshell 代码实际上什么都不做
cManager
因为实例没有传递回采样器。您需要按如下方式修改代码:CookieManager cManager = sampler.getCookieManager(); cManager.clear(); sampler.setCookieManager(cManager);
因此,
sampler
可以使用带有清除cookie的" cManager"实例
请参阅如何使用 BeanShell:JMeter 最喜欢的内置组件指南,了解有关 Apache JMeter 中 Beanshell 脚本的更多信息。