如何在Jmeter中将变量设置为自定义函数?

时间:2018-06-18 12:29:13

标签: variables jmeter

我在Jmeter 4.0的BeanShellSampler.bshrc中有一个基本功能

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

我在BeanShell Sampler中调用了如下

String N = "123123";
log.info("${__BeanShell(getMyString("${__V(Var${N})}"),)}");

当我运行Sampler时,输出就像那样。

2018-06-18 15:25:40,080 INFO o.a.j.u.BeanShellTestElement: MyString: Var${N}

如何将字符串变量设置为我的函数?

我在Jmeter web site

中阅读了函数文章

谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 将下一行添加到 user.properties 文件中:

    beanshell.sampler.init=BeanShellSampler.bshrc
    
  2. 将您的代码修改为:

    String N = "123123";
    log.info(getMyString(N));
    
  3. 就是这样,你应该在 jmeter.log 文件中获得MyString: 123123

    JMeter Beanshell Function

  4. 请注意所有形式的脚本starting from Jmeter 3.1 it is recommended to use GroovyGroovy performance is much better comparing to Beanshell,因此请考虑采取以下步骤:

    1. 在JMeter安装的“bin”文件夹中创建一个文件,即foo.groovy,并将您的功能放在那里:

      String getMyString(String strParam) {
          return "MyString: " + strParam;
      }
      
    2. 将下一行添加到 user.properties 文件中:

    3. 您应该可以从__groovy() function引用自定义代码,例如:

      ${__groovy(log.info(getMyString("123123")),)}
      

      功能可以在测试计划的任何地方使用

      JMeter Groovy Function

答案 1 :(得分:0)

对于每个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文件或对每个程序初始化属性使用相同的.bshrc文件。

在您的情况下,如果您使用本地字符串变量N并将其与脚本一起传递。如果使用$ {Variable},则必须定义一个JMeter变量,以便JMeter可以选择其值。为此,您可以使用vars.put,将N值写入JMeter变量并使用$ {N}。

我已将Var123123值定义为FinalValue,如下所示 enter image description here

2个beanshell采样器,一个是将String变量N放到Jmeter变量中,另一个是beanshell脚本,如下所示enter image description here enter image description here

您可以在日志中看到其打印的VAR123123FinalValue

我选择2个beashell采样器的原因是,如果我将N写入JMeter变量并在同一个脚本中使用它,那么在采样器执行之前它不会更新N值。

参考文献:

Configuring JMeter

JMeter Beanshell

如果有帮助请告诉我