从 BeanShell 程序调用 BeanShell 函数,如 PreProcessor、PostProcessor、Assertion 等
Call BeanShell function from BeanShell Programs like PreProcessor, PostProcessor, Assertion, etc
先决条件:
在 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();
它给出了一个错误:
Assertion error: true
Assertion failure: false
Assertion failure message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: `` String myStr = getMyString(); print("MyStr: "+myStr);'' : Typed variable declaration : Command not found: getMyString()
将下一行添加到 user.properties 文件(位于 JMeter 安装的 "bin" 文件夹下)
beanshell.function.init=BeanShellFunction.bshrc
- 重新启动 JMeter 以选择 属性
完成后,您应该可以在任何需要的地方使用它
同样的方法适用于
beanshell.sampler.init
beanshell.assertion.init
beanshell.listener.init
- 等等
参考文献:
从这个 SO post 我找到了解决方案: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
因此需要从任何程序(预处理器、post处理器等)调用的相同函数我们需要将函数复制到每个.bshrc
文件 或 对每个程序初始化 属性.
使用 相同的 .bshrc
文件
要使用的语法:
您需要使用与发送 URL 参数相同的语法:
String myStr = "${__BeanShell(getMyString())}";
这会自动从定义的 .bshrc
文件中调用 beanshell 方法。
高级脚本
如果你的 BeanShell 函数接受一个参数:
String getMyString(String strParam)
{
return "MyString: "+strParam;
}
并且你想将一个属性作为参数传递给BeanShell函数,你可以使用以下语法:
String myStr = "${__BeanShell(getMyString("${__P(param1)}"))}";
相信我,它可以工作,而且不会出现任何语法错误。
先决条件:
在 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();
它给出了一个错误:
Assertion error: true
Assertion failure: false
Assertion failure message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: `` String myStr = getMyString(); print("MyStr: "+myStr);'' : Typed variable declaration : Command not found: getMyString()
将下一行添加到 user.properties 文件(位于 JMeter 安装的 "bin" 文件夹下)
beanshell.function.init=BeanShellFunction.bshrc
- 重新启动 JMeter 以选择 属性
完成后,您应该可以在任何需要的地方使用它
同样的方法适用于
beanshell.sampler.init
beanshell.assertion.init
beanshell.listener.init
- 等等
参考文献:
从这个 SO post 我找到了解决方案: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
因此需要从任何程序(预处理器、post处理器等)调用的相同函数我们需要将函数复制到每个.bshrc
文件 或 对每个程序初始化 属性.
.bshrc
文件
要使用的语法:
您需要使用与发送 URL 参数相同的语法:
String myStr = "${__BeanShell(getMyString())}";
这会自动从定义的 .bshrc
文件中调用 beanshell 方法。
高级脚本
如果你的 BeanShell 函数接受一个参数:
String getMyString(String strParam)
{
return "MyString: "+strParam;
}
并且你想将一个属性作为参数传递给BeanShell函数,你可以使用以下语法:
String myStr = "${__BeanShell(getMyString("${__P(param1)}"))}";
相信我,它可以工作,而且不会出现任何语法错误。