1

JMeter 2.13 版 r1665067

因此,在 CookieManager 中使用用户定义的变量和/或 JMeter 属性变量时,我似乎遇到了一些麻烦。

如果我在 CookieManager 中使用变量作为 Cookie 的值,无论它是用户定义的 Var 还是属性 Var,我在尝试查看 BeanShell Pre 和 PostProcessor 中的 Cookie 值时都会遇到同样的问题。

如果我的 Cookie 管理器有以下内容:*第一行是使用属性变量时,第二行是使用用户定义变量中的 var 时,*仅供参考,这两行不是同时使用

饼干管理器:

      NAME        VALUE                DOMAIN        PATH
1st)  MYID    ${__P(propCookie)}  www.mydomain.com     /
                      OR
2nd)  MYID     ${userCookie}      www.mydomain.com     /

propCookie变量在 CLI传递或在 .properties 文件中定义,如下所示:

COMMAND-LINE --> -JpropCookie=SRV1
IN PROP FILE --> propCookie=SRV1

userCookie变量在用户定义变量配置元素中定义,如下所示

  NAME             VALUE           DESCRIPTION
userCookie   ${__P(propCookie)}   User var using prop variable as value


然后,当我运行测试时,我可以在结果树的“请求”选项卡中看到它正在显示 Cookie,并且它分配了正确的值,这很好……但是当我尝试在BeanShell Pre/Post-Processor,它只显示变量而不是实际值。

BeanShell 预处理器代码

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

log.info("### Inside BeanShell PreProcessor:");
CookieManager manager = sampler.getCookieManager();
log.info("Cookie Count = '" + manager.getCookieCount() + "'");

for (int i = 0; i < manager.getCookieCount(); i++) {
    Cookie cookie = manager.get(i);
    log.info("\t\t  Cookie.getName() = '" + cookie.getName() + "'");
    log.info("\t\t Cookie.getValue() = '" + cookie.getValue() + "'");
}

这是 BeanShell 脚本在日志中的输出:

2015/04/29 14:33:00 INFO  - jmeter.util.BeanShellTestElement: ### Inside BeanShell PreProcessor: 
2015/04/29 14:45:58 INFO  - jmeter.util.BeanShellTestElement: Cookie Count = '1' 
2015/04/29 14:33:00 INFO  - jmeter.util.BeanShellTestElement:         Cookie.getName() = 'MYID' 
2015/04/29 14:33:00 INFO  - jmeter.util.BeanShellTestElement:        Cookie.getValue() = '${userCookie}' 


因此,正如您在 BeanShell 的输出中看到的那样,getValue()函数正在打印分配给 Cookie 值的变量,就像这样 -->“ ${userCookie} ”,而不是实际 Cookie 的值,即“ SRV1 ”...

最后,如果我尝试使用应该自动创建的“COOKIE_”变量,并且我在 BeanShell 中使用它,vars.get("COOKIE_MYID") ,它每次都会打印“null” ......我拥有所有在jmeter.properties文件中设置了正确的 Cookie 属性,就像这里的这些,所以我不确定问题是什么:

CookieManager.allow_variable_cookies=true
CookieManager.save.cookies=true
CookieManager.name.prefix=COOKIE_

我对为什么会发生这种情况感到非常困惑,所以如果有人对为什么会发生这种情况有任何想法,请随时不胜感激!

提前致谢,
马特

4

1 回答 1

1

HTTP Request Sampler 实际上使用 CookieManager 的getCookieHeaderForURL方法设置 cookie,该方法正确地替换了该值。

在 Beanshell 中,

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

manager = sampler.getCookieManager();
log.info(manager.getCookieHeaderForURL(new URL("http://www.google.com")));   //update the URL

这为 cookie 提供了更新的值。


CookieManager 的获取和添加方法用于HTTP Cookie Manager在运行时获取和添加 cookie。因此,getValue方法按原样给出值。getCookieHeaderForURL从 Cookie 管理器中为具有更新值的域获取适当的 cookie。

于 2015-04-29T21:06:34.717 回答