我正在尝试在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.
我无法弄清楚问题是什么,因为该字符有,
而不是;
。
答案 0 :(得分:1)
请在Beanshell PreProcessor或BeanShell 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个选择:
通过JMeter的encodeURIComponent()使用JavaScript __javaScript function功能,如:
${__javaScript(encodeURIComponent("${query}"),)}
或者使用上述__groovy() function中的URLEncoder,如:
${__groovy(URLEncoder.encode(vars.get('query')\, 'UTF-8').replaceAll('\\\+'\,'%20'),)}
在高负载情况下的性能方面,首选Groovy选项,请查看Apache Groovy - Why and How You Should Use It文章以获取更多详细信息。