Jmeter beanshell遭遇“;”

时间:2018-04-20 21:58:54

标签: jmeter beanshell

我正在尝试在jmeter中执行一个URL参数值的beanshell脚本。我有以下内容:

${__BeanShell(vars.get("query").replaceAll(" ","%20"))}

jmeter控制台输出:

Caused by: bsh.ParseException: In file: inline evaluation of: ``vars.get("query").replaceAll(" ";'' Encountered ";" at line 1, column 33.

我无法弄清楚问题是什么,因为该字符有,而不是;

3 个答案:

答案 0 :(得分:1)

请在Beanshell PreProcessorBeanShell PostProcessor中使用以下代码,以便将单个空格字符替换为'%20'

String myString = vars.get("query");
String new_var = myString.replaceAll(" ", "%20");
vars.put("updated_value", new_var);

您可以在下次请求中进一步使用'updated_value'替换为'%20'的{​​{1}}变量。

有关JMeter元素的更多信息,请参阅JMeter Knowledge Base

答案 1 :(得分:1)

请参阅JMetrer's functions教程,您需要转义每个逗号:

  

如果函数参数包含逗号,请务必使用" \"进行转义,否则JMeter会将其视为参数分隔符。

在你的情况下

  ${__BeanShell(vars.get("query").replaceAll(" "\,"%20"))}

另外,请考虑使用__groovy函数代替__BeanShell以获得更好的性能。

答案 2 :(得分:1)

你做的事情很荒谬。编码URL不仅仅是关于转义空格,还要查看您需要处理的URLEncoder文档:

  • 所有非拉丁语非字母数字字符
  • .-*_
  • 之外的所有字符

这可能非常棘手。

所以你基本上有2个选择:

在高负载情况下的性能方面,首选Groovy选项,请查看Apache Groovy - Why and How You Should Use It文章以获取更多详细信息。