如何根据需要清除Jmeter中每个Thread(用户)的JSESSIONID

时间:2012-10-03 11:35:02

标签: testing jmeter qa performance-testing

我想在任何时候(根据我的要求)清除Jmeter JsessionID变量。

我知道Jmeter CookieManager中有一个名为“每次迭代时清除Cookie ”的复选框选项。
但它会在每次迭代时清除会话,而我想在迭代中随时清除它。

我怎样才能在Jmeter中做到这一点?

3 个答案:

答案 0 :(得分:7)

你可以,只需添加post / pre process beanShell并使用此代码

import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;
CookieManager manager = sampler.getCookieManager();
for (int i=0;i<manager.getCookieCount();i++){
    Cookie cookie = manager.get(i);
    //remove a cookie 
    if (cookie.getName().equals("BAD_COOKIE")){
        sampler.getCookieManager().remove(i);
    }
}

答案 1 :(得分:2)

目前你不能简单地,特别是如果你想清除一个特定的cookie。

您应该在JMeter Bugzilla处提出增强请求,以确保您想要做的事情。

我认为自定义函数是一个很好的功能,请参阅:

答案 2 :(得分:1)

我的方式与上面的方式相差不大(这对我不起作用,对不起),但它更短,包含循环内索引的重要更新,以及一些用于清除脚本使用的附加演示(我希望;))

JSESSIONID是令牌之一(第一个或后续的一些), 因此,为了删除包括JSESSIONID在内的所有令牌,我建议在JSR223 Pre-和/或PostProcessor中使用以下Java脚本:

import org.apache.jmeter.protocol.http.control.CookieManager;

CookieManager cManager = sampler.getCookieManager();
    int count = cManager.getCookieCount();
    for (int index = 0; index < count; index++) {
        cManager.remove(0);
        }

Example of adding the script to PostProcessor in jMeter

注意: for 循环里面是(0),而不是(索引),这有助于避免OutOfBoundary异常,因为每次迭代后CookieManager实例的大小都会变小。