2013-11-22 61 views
0

我在JMeter问题上很新。BeanShell预处理器更新用户定义变量

在测试脚本中,我有一个BeanShell PreProcessor元素,用于更新以前在“用户定义的变量”元素中定义的一些变量。

后者这些变量在“Http Requests”中使用。但是,http请求中使用的值是默认值。

脚本似乎正在工作,由于一些调试打印();

我的问题是,如果有必要延迟脚本以确保BeanShell完成?

非常感谢您的关注

回答

2

没有必要,因为它是被之前要求执行把任何延迟BeanShell的预处理器。我建议您检查jmeter.log文件以查看是否存在任何脚本问题,因为Beanshell预处理器不会在任何位置报告错误,包括查看结果树侦听器。

至少有2种方式,以确保一切都很好,你的BeanShell脚本:

  1. 把你的调试打印代码变量替换逻辑,看它是否触发
  2. 使用JMeter的__Beahshell功能在你的HTTP请求中。如果没关系 - 查看结果树将显示beanshell生成的值。否则 - 该字段将为空白,并且相关错误将显示在日志中。

例测试用例:

鉴于以下测试计划结构:

  • 线程组与1个用户和1环
  • HTTP GET请求到google.com与路径/和参数q

如果在beanshell函数后面提供参数“q”:

${__BeanShell(System.currentTimeMillis())} 

,并期待为查看结果树“请求”选项卡中,你应该看到:

GET http://www.google.com/?q=1385206045832 

,如果更改功能,像一些不正确的:

${__BeanShell(Something.incorrect())} 

你会看到一个空白的请求。

改变现有的变量(或创建新的变量,如果不存在)的正确方法看起来像

vars.put("variablename", "variablevalue"); 

* 重要提示:* JMeter的变量是Java中的字符串,如果你想设置其他东西(日期,整数,无论​​)到JMeter变量你需要将其强制转换为字符串。

例子:

int i = 5; 
vars.put("int_i", String.valueOf(i)); 

希望这有助于。

-2

我也是jmeter的新手,但正如我所知,“用户定义变量”中定义的变量是常量,因此您无法更改它们。我建议在预处理器或CSV数据集配置中使用“用户参数”。

+1

这是不正确的。可以使用BeanShell预处理器覆盖用户定义的变量的值。 参见:随时改变JMeter的变量(http://www.blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell) 本质: 假设你有一个用户自定义在While循环中某处使用的值为“true”的变量名为“continue”。您可以将它设置为“false”,如下所示: 'vars.put(“counter”,“false”);' – theINtoy