在JMeter' Loop Controller'中迭代时,Cookies不会重置?

时间:2015-01-02 20:44:57

标签: jmeter

使用Jmeter 2.12,什么可能导致cookie在JMeter循环控制器期间无法重置?我已经尝试了所有我能想到的东西,但每次循环时,之前登录的其中一个cookie仍然存在。它似乎并没有真正清除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();

2 个答案:

答案 0 :(得分:8)

好的,我发现了问题。即使是' HTTP Cookie管理器'每次迭代都有一个名为“清除Cookie”的选项,“迭代”#39;它说的不包括循环控制器。它所指的是'线程组'仅迭代/循环。这不清楚,我浪费了半天,直到我想出来。如果复选框说“清除每个线程组迭代的cookie”,那么不会让人感到困惑。代替。非常失望。

答案 1 :(得分:3)

  1. 循环控制器不会增加迭代次数。您可以通过评估vars.getIteration() Beanshell代码行来测试它。迭代在线程组级别上递增。要覆盖它,您可以在任何启用Beanshell的测试元素(采样器,前/后处理器,断言等)中调用vars.incIteration()方法。
  2. 用于清除Cookie的Beanshell代码实际上没有做任何事情,因为cManager实例未被传递回采样器。您需要按如下方式修改代码:

    CookieManager cManager = sampler.getCookieManager();
    cManager.clear();
    sampler.setCookieManager(cManager);
    

    所以sampler可以拥有" cManager"已清除cookie的实例

  3. 有关Apache JMeter中Beanshell脚本的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。