繁体   English   中英

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

[英]Cookies won't reset on iteration in JMeter 'Loop Controller'?

使用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();

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

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

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

    因此, sampler可能具有已清除cookie的“cManager”实例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM