JMeter - 在 CookieManager 中使用变量时的奇怪行为

JMeter - Strange Behavior when Variables used in CookieManager

JMeter 版本 2.13 r1665067

所以我在使用用户定义的变量时似乎遇到了一些麻烦 and/or JMeter 属性 CookieManager 中的变量。

如果我在 CookieManager 中使用变量作为 Cookie 的值,无论它是用户定义的 Var 还是 属性 Var,我在尝试查看 Cookie 的值时遇到同样的问题( s) 在 BeanShell 前处理器和后处理器中。

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

CookieManager:

      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 变量在 User Defined Variables 配置元素中定义如下:

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


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

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 属性=63=] 文件,就像这里的这些,所以我不确定问题是什么:

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

我很困惑为什么会这样,所以如果有人对为什么会这样有任何想法,请随时提出,我们将不胜感激!

提前致谢,
马特

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

在豆壳中,

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 的获取和添加方法用于在 运行 时间获取和添加 cookie 到 HTTP Cookie Manager。因此,getValue 方法按原样给出值。 getCookieHeaderForURL 从具有更新值的域的 Cookie 管理器获取适当的 cookie。