【问题标题】:Call BeanShell function from BeanShell Programs like PreProcessor, PostProcessor, Assertion, etc从 BeanShell 程序(如 PreProcessor、PostProcessor、Assertion 等)调用 BeanShell 函数
【发布时间】:2017-07-07 08:45:59
【问题描述】:

先决条件:

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

String getMyString()
{
    return "MyString";
}

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

beanshell.function.init = BeanShellFunction.bshrc

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

${__BeanShell(getMyString())}

它适用于以下情况:

问题:

如何从 BeanShell 程序(如 PreProcessor、PostProcessor、Assertion 等)调用相同的函数?

分析:

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

String myStr = getMyString();

它给出一个错误:

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

【问题讨论】:

    标签: jmeter beanshell


    【解决方案1】:
    1. 将下一行添加到 user.properties 文件(位于 JMeter 安装的“bin”文件夹下)

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

    同样的方法适用于

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

    参考资料:

    【讨论】:

    • 你不明白我的问题,你能详细说明你的第3点吗?在 BeanShell 程序中使用它的语法是什么?
    • 1.将${__BeanShell(getMyString())} 放入“参数”部分2。将其称为String str = Parameters;
    【解决方案2】:

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

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

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

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

    要使用的语法:

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

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

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

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

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

    如果你想将属性作为参数传递给 BeanShell 函数,可以使用以下语法:

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

    相信我,它可以正常工作,并且不会出现任何语法错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      相关资源
      最近更新 更多