首页 文章

Cookies 赢了't reset on iteration in JMeter ' Loop Controller'?

提问于
浏览
5

使用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 回答

  • 7
    • 循环控制器不会增加迭代次数 . 您可以通过评估vars.getIteration() Beanshell代码行来测试它 . 迭代在线程组级别上递增 . 要覆盖它,您可以在任何启用Beanshell的测试元素(采样器,前/后处理器,断言等)中调用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指南 .

  • 3

    好的,我发现了问题 . 即使'HTTP Cookie Manager'有一个名为'每次迭代清除cookie'的选项,它所说的'迭代'也不包括循环控制器 . 它所指的只是'Thread Group'迭代/循环 . 这不清楚,我浪费了半天,直到我想出来 . 如果复选框说“清除每个线程组迭代的cookie”,则不会令人困惑 . 非常失望 .

相关问题