Jmeter将两个参数传递给自定义函数

时间:2018-04-11 08:22:05

标签: jmeter

在Jmeter中我能够通过一个参数传递工作来获得自定义函数,但是我无法通过两个参数传递工作获得自定义函数

在BeanShellFunction.bshrc中我定义了

printStr1(String str1)
{
    System.out.println(str1);
}
printStr2(String str1, String str2)
{
    System.out.println(str1, str2);
}

在我的Jmeter BeanShell断言中我有

${__BeanShell(printStr1("hello"))}
${__BeanShell(printStr2("hello", "howAreYou"))}

我确实看到了 - >你好 我没有看到第二个功能结果 不知怎的,第二个参数传递不起作用

从jmeter日志中我看到: 2018-04-11 18:17:5548错误oajuBeanShellInterpreter:调用bsh方法时出错:eval文件:内联评估:``printStr2(" hello"''遇到& #34;(\" hello \&#34 ;;"第1行,第10栏。

2 个答案:

答案 0 :(得分:1)

  1. 您需要将printStr2功能修改为PrintStream.println() 方法只能接受单个字符串。将其更改为:

    printStr2(String str1, String str2)
    {
        System.out.println(str1 + str2);
    }
    
  2. 根据JMeter documentation

      

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

    您需要修改__Beanshell函数调用以转义逗号,如:

    ${__BeanShell(printStr2("hello "\, "howAreYou"),)}
    
  3. 有关使用JMeter函数的更多信息,请参阅Apache JMeter Functions - An Introduction文章。

答案 1 :(得分:0)

您没有println超过1个参数,因此System.out.println(str1, str2)无法编译。

如果要连接字符串,只需在printStr2方法中连接字符串:

System.out.println(str1 + str2);

考虑转移到JSR223 Sampler,因为Beanshell可能在JMeter中已弃用。

另请注意,有一个特殊的OUT可用:

  

OUT - System.out - 例如通过out.println( “消息”)