【问题标题】:Jmeter beanshell Encounter ";"Jmeter beanshell 遭遇“;”
【发布时间】:2018-04-23 14:48:18
【问题描述】:

我正在尝试在 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.

我无法弄清楚问题出在哪里,因为那里的字符是 , 而不是 ;

【问题讨论】:

    标签: jmeter beanshell


    【解决方案1】:

    你在做一些荒谬的事情。对 URL 进行编码不仅是转义空格,还需要查看您需要处理的 URLEncoder 文档:

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

    这可能非常棘手。

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

    • 通过 JMeter 的 __javaScript function 使用 JavaScript encodeURIComponent() 函数,例如:

      ${__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 文章了解更多详细信息。

    【讨论】:

      【解决方案2】:

      JMetrer's functions教程,每个逗号都需要转义:

      如果函数参数包含逗号,那么一定要用“\”转义,否则JMeter会将其视为参数分隔符。

      你的情况

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

      还可以考虑使用__groovy 函数而不是__BeanShell 以获得更好的性能。

      【讨论】:

        【解决方案3】:

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

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

        您可以在下一个请求中进一步使用'updated_value' 变量,并将空格替换为'%20'

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-11
          • 2017-03-22
          相关资源
          最近更新 更多