从BeanShell程序调用BeanShell函数,如PreProcessor,PostProcessor,Assertion等

时间:2017-07-07 08:45:59

标签: jmeter beanshell

先决条件:

在JMeter bin文件夹中,我编辑了BeanShellFunction.bshrc文件以添加我的功能,如下所示

String getMyString()
{
    return "MyString";
}

我已将BeanShellFunction.bshrc文件中的jmeter.properties设为

  

beanshell.function.init = BeanShellFunction.bshrc

当我使用以下语法调用函数时,它可以正常工作。

${__BeanShell(getMyString())}

以下情况适用:
BeanShell Function Call

问题:

如何从诸如PreProcessor,PostProcessor,Assertion等BeanShell程序中调用相同的函数?

分析:

我尝试了以下但没有运气:

String myStr = getMyString();

BeanShell Assertion

它出现错误:

  

断言错误:真实   断言失败:错误   断言失败消息:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件:内联评估:``String myStr = getMyString(); print(“MyStr:”+ myStr);'':类型变量声明:未找到命令:getMyString()

BeanShell Error

2 个答案:

答案 0 :(得分:1)

  1. 将下一行添加到 user.properties 文件(位于" bin" JMeter安装的文件夹下)

    beanshell.function.init=BeanShellFunction.bshrc
    
  2. 重新启动JMeter以选择属性
  3. 完成后,你应该可以在任何需要的地方使用它

    JMeter Beanshell Custom Function

  4. 同样的方法适用于

    • beanshell.sampler.init
    • beanshell.assertion.init
    • beanshell.listener.init

    参考文献:

答案 1 :(得分:0)

从这篇SO帖子中我找到了解决方案:Calling Jmeter Functions from BeanShell Assertion Script

<强>解决方案
对于每个BeanShell程序类型,beanshell.*.init中定义了不同的bin/user.properties属性:

  

beanshell.function.init = BeanShellFunction.bshrc
  beanshell.preprocessor.init = BeanShellSampler.bshrc   beanshell.postprocessor.init = BeanShellSampler.bshrc   beanshell.assertion.init = BeanShellFunction.bshrc

因此需要从任何程序(预处理程序,后处理程序等)调用相同的函数,我们需要将函数复制到每个.bshrc文件 OR 对每个程序初始属性使用相同的.bshrc文件

要使用的语法:

您需要使用与发送URL参数相同的语法:

String myStr = "${__BeanShell(getMyString())}";

这会自动从定义的.bshrc文件中调用beanshell方法。

BeanShell Program

适用于高级脚本
如果您的BeanShell函数接受参数:

String getMyString(String strParam)
{
    return "MyString: "+strParam;
}

并且您希望将属性作为参数传递给BeanShell函数,您可以使用以下语法:

String myStr = "${__BeanShell(getMyString("${__P(param1)}"))}";

BeanShell Advance

相信我它的工作原理并没有给出任何语法错误。