在JMeter"循环控制器"中迭代时不会重置Cookie?

dja*_*fan 6 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
Run Code Online (Sandbox Code Playgroud)

我尝试使用此代码添加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();
Run Code Online (Sandbox Code Playgroud)

dja*_*fan 8

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


Dmi*_*i T 3

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

    CookieManager cManager = sampler.getCookieManager();
    cManager.clear();
    sampler.setCookieManager(cManager);
    
    Run Code Online (Sandbox Code Playgroud)

    所以sampler可以让“cManager”实例清除cookie

有关 Apache JMeter 中 Beanshell 脚本编写的更多信息,请参阅如何使用 BeanShell:JMeter 最喜欢的内置组件指南。