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。
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。