JMeter - 验证是否使用了特定的Cookie值?

时间:2015-04-27 22:28:25

标签: cookies jmeter beanshell

因此,在我的测试计划中,我在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的值是否正确..?

非常感谢任何想法或建议!

先谢谢,
马特

1 个答案:

答案 0 :(得分:3)

如果您尝试从Beanshell中的父采样器 PostProcessor 获取cookie管理器 - 您需要使用 ctx.getCurrentSampler(),而不是“sampler”,因为它是没有暴露在脚本变量中。

所以只需改变这一行:

CookieManager manager = sampler.getCookieManager();

 CookieManager manager = ctx.getCurrentSampler().getCookieManager();

您的脚本应该按照您的预期开始工作。

ctxJMeterContext实例的简写,getCurrentSampler()方法名称不言自明。

有关Beanshell脚本编制的详细信息,请查看How to use BeanShell: JMeter's favorite built-in component指南。