簡體   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