我在JMeter *(版本2.13)中创建了一个测试计划。我能够在计划中添加Cookie管理器,并在HTTP请求之间保留我的cookie,这样就可以了。
我现在要做的是,如果可能的话,从一开始就保留一个Cookie (*称为“JSESSIONID”)然后有另一个Cookie (*让我们称之为“ MYID“)可在测试期间进行修改。
我对此的第一次尝试如下:
+Thread Group
-HTTP Request Defaults
-HTTP Cookie Manager
+HTTP Request - Goto HomePage
-HTTP Cookie Manager - Set MYID="server_1"
+HTTP Request - Load Login Page
-HTTP Cookie Manager - Set MYID="server_2"
....and so on for about 3 more HTTP Requests....
但是,这样做只保留原始Cookie管理器捕获的原始Cookie,该Cookie管理器设置在Thread Group元素下。
Apache的网站警告说:
“如果Sampler范围内有多个Cookie管理器,则目前无法指定使用哪个Cookie管理器。此外,存储在一个cookie管理器中的cookie不可用于任何其他管理器,所以要小心使用多个Cookie管理器。“
我做的另一个测试,与第一个类似,只是我在测试开始时添加了一个User Defined Variables元素,其中MYID Cookie的变量设置为一个服务器,然后大约2或3个HTTP请求我有第二个User Defined Variables元素,这次将变量设置为另一个服务器。但是,在阅读了有关用户变量的更多内容之后,JMeter仅在测试开始时读取用户定义变量ONCE。所以我最后设置的变量将保留为我在第二个用户定义变量部分中设置的变量。因此,这种方式在测试期间无法更改Cookie值...
我也是这样,从ApacheJMeter的网站上看到这里Using Variables to Parametrize Tests,这似乎与我想要达到的最接近。但是,从他们的例子来看,它似乎是在测试开始之前修改变量,例如从命令行设置变量...
要点:
总结一下,我想要实现的是发送带有2个Cookie的HTTP请求:
1. JSESSIONID
2. MYID
其中 JSESSIONID 从一开始就保持不变, MYID 我想在测试期间更改它的值*(多次,如果可行的话)
如果这没有意义,请告诉我,我会尝试进一步解释。
任何想法或建议将不胜感激!
先谢谢,
马特
答案 0 :(得分:0)
您可以将Beanshell脚本用于Cookie操作:
将以下代码放入预处理器"脚本"面积:
import org.apache.jmeter.protocol.http.control.Cookie;
import org.apache.jmeter.protocol.http.control.CookieManager;
CookieManager manager = sampler.getCookieManager();
for (int i = 0; i < manager.getCookieCount(); i++) {
Cookie cookie = manager.get(i);
if (cookie.getName().equals("MYID")) {
cookie.setValue(vars.get("foo"));
manager.remove(i);
manager.add(cookie);
break;
}
}
以上代码将替换&#34; MYID&#34; Cookie值与&#34; foo&#34; JMeter通过直接调用CookieManager类的变量值(有关所有可能的方法和字段,请参阅API文档)
查看How to use BeanShell: JMeter's favorite built-in component指南,了解有关Apache JMeter中Beanshell脚本的高级信息。