Cookie 不会在 JMeter 'Loop Controller' 中的迭代中重置?
Cookies won't reset on iteration in JMeter 'Loop Controller'?
使用 Jmeter 2.12,什么会导致 cookie 在 JMeter 循环控制器期间无法重置?我已经尝试了所有我能想到的方法,但每次循环时,上一次登录的 cookie 之一仍然存在。它似乎并没有真正清除cookies。
下面是我如何组合我的循环:
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 Manager' 有一个名为 'Clear cookies each iteration' 的选项,但它提到的 'iteration' 不包括循环控制器。它所指的只是 'Thread Group' iterations/loops。这还不清楚,我浪费了半天时间才弄明白。如果复选框显示 'Clear cookies each Thread Group iteration' 就不会造成混淆。非常失望。
- 循环控制器不递增迭代。您可以通过在任何支持 Beanshell 的测试元素(采样器、Pre/Post 处理器、断言等)
中评估 vars.getIteration() Beanshell code line. Iteration is being incremented on Thread Group level. To override this you can call vars.incIteration() 方法来测试它
您用于清除 cookie 的 Beanshell 代码实际上什么都不做,因为 cManager
实例没有被传回采样器。您需要修改您的代码如下:
CookieManager cManager = sampler.getCookieManager();
cManager.clear();
sampler.setCookieManager(cManager);
所以 sampler
可以让 "cManager" 实例清除 cookie
有关 Apache JMeter 中 Beanshell 脚本的更多信息,请参阅 How to use BeanShell: JMeter's favorite built-in component 指南。
使用 Jmeter 2.12,什么会导致 cookie 在 JMeter 循环控制器期间无法重置?我已经尝试了所有我能想到的方法,但每次循环时,上一次登录的 cookie 之一仍然存在。它似乎并没有真正清除cookies。
下面是我如何组合我的循环:
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 Manager' 有一个名为 'Clear cookies each iteration' 的选项,但它提到的 'iteration' 不包括循环控制器。它所指的只是 'Thread Group' iterations/loops。这还不清楚,我浪费了半天时间才弄明白。如果复选框显示 'Clear cookies each Thread Group iteration' 就不会造成混淆。非常失望。
- 循环控制器不递增迭代。您可以通过在任何支持 Beanshell 的测试元素(采样器、Pre/Post 处理器、断言等) 中评估 vars.getIteration() Beanshell code line. Iteration is being incremented on Thread Group level. To override this you can call vars.incIteration() 方法来测试它
您用于清除 cookie 的 Beanshell 代码实际上什么都不做,因为
cManager
实例没有被传回采样器。您需要修改您的代码如下:CookieManager cManager = sampler.getCookieManager(); cManager.clear(); sampler.setCookieManager(cManager);
所以
sampler
可以让 "cManager" 实例清除 cookie
有关 Apache JMeter 中 Beanshell 脚本的更多信息,请参阅 How to use BeanShell: JMeter's favorite built-in component 指南。