2015-01-02 31 views
5

使用Jmeter 2.12,在JMeter Loop Controller期间可能导致cookies无法重置的原因是什么?我试过了我能想到的所有东西,但每次通过循环时,以前登录的其中一个cookie仍然存在。它似乎没有真正清除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(); 

回答

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

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

    所以sampler可能有清除饼干

说,“cManager”实例见How to use BeanShell: JMeter's favorite built-in component指南上的Apache JMeter的BeanShell的脚本的详细信息。

+0

谢谢,我不知道迭代变量。 – djangofan

+0

对于任何遇到此问题的人,您所需要的只是 sampler.getCookieManager()。clear(); – rpgFANATIC

+0

超级,为我工作就像一个魅力! –

6

好吧,我想出了问题。即使“HTTP Cookie管理器”有一个名为“每次迭代清除cookie”的选项,它所说的“迭代”不包括循环控制器。它所指的仅仅是“线程组”迭代/循环。这是不明确的,我花了半天时间,直到我明白了这一点。如果复选框显示'清除每个线程组迭代',则不会造成混淆。非常失望。