因此,在我的测试计划中,我在Thread Group中设置了Cookie Manager,为1 Cookie设置了特定的Cookie值。我们称之为 MYID 。我试图找出一种方法来验证这个特定Cookie的值是否用于完成这一个HTTP请求,因为如果我将我的MYID设置为特定值*(实际上告诉哪个要转到的网络服务器,对" Server1" 说,但 Server1 已关闭,不可用等... HAProxy应该更改这个并发送到 Server2 。
所以基本上我想尝试确保Cookie MYID 等于 " Server1" 一直到HTTP请求。
我正在尝试使用BeanShell PostProcessor在请求运行后验证Cookie的值,但是当我尝试使用某些代码时,我在PreProcessor内部设置了一个cookie,在我的另一个测试计划中我得到一个错误说:
错误消息:
类型变量声明:尝试解析方法:未定义变量或类名的getCookieManager():sampler
下面是我在另一个测试计划中从BeanShell预处理器略微修改的代码......
CODE:
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")) {
if (cookie.getValue().equals("Server1")) {
log.info("OK: The Cookie contained the Correct Server Number...");
} else {
log.info("ERROR: The Cookie did NOT contain the Correct Server Number...");
}
break;
}
}
对于错误,我在考虑&#34;采样器&#34;对象已经不再可用,因为请求已经运行,或者是那些行,但我不确定...
或者,我应该使用另一个JMeter对象而不是&#34; BeanShell PostProcessor&#34;为了验证Cookie的值是否正确..?
非常感谢任何想法或建议!
先谢谢,
马特
答案 0 :(得分:3)
如果您尝试从Beanshell中的父采样器 PostProcessor 获取cookie管理器 - 您需要使用 ctx.getCurrentSampler(),而不是“sampler”,因为它是没有暴露在脚本变量中。
所以只需改变这一行:
CookieManager manager = sampler.getCookieManager();
到
CookieManager manager = ctx.getCurrentSampler().getCookieManager();
您的脚本应该按照您的预期开始工作。
ctx
是JMeterContext实例的简写,getCurrentSampler()
方法名称不言自明。
有关Beanshell脚本编制的详细信息,请查看How to use BeanShell: JMeter's favorite built-in component指南。