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



使用 Jmeter 2.12,什么可能导致 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();

好的,我想出了问题所在。 尽管"HTTP Cookie管理器"有一个名为"每次迭代清除cookie"的选项,但它所说的"迭代"不包括循环控制器。 它所指的只是"线程组"迭代/循环。 这并不清楚,我浪费了半天的时间,直到我想通了。 如果复选框显示"清除每个线程组迭代的 cookie",就不会混淆。 非常令人失望。

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

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

    因此,sampler可以使用带有清除cookie的" cManager"实例

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

最新更新