无法使用bsh.shared在JMeter中的线程组之间共享数组

时间:2019-08-28 20:33:12

标签: jmeter beanshell

我无法使用bsh.shared命名空间在线程组之间共享数组,请对此进行指导

以下是我的jmx文件的结构:

  1. ThreadGroup1
    • 采样器1
      • Beanshell-PostProcessor1
  2. ThreadGroup2
    • 采样器2
      • Beanshell-PreProcessor2

在BeanshellPostProcessor1内部,

if (bsh.shared.names == void){
   bsh.shared.names = new java.util.ArrayList();
}
String[] arr = vars.get("fruits").split(',');
for(int i =0;i < arr.length; i++){
    if (arr[i].contains("APPLE")){
        bsh.shared.names.add[arr[i]]
    }

}

当我尝试在Beanshell-PreProcessor2中访问bsh.shared.names时,它不返回该值。

1 个答案:

答案 0 :(得分:0)

您的代码有多个问题,例如:

  1. 您需要将split(',')替换为split(","),因为String.split()函数将String作为参数,并且您要提供一个字符
  2. 您需要将bsh.shared.names.add[arr[i]]替换为bsh.shared.names.add(arr[i]);,因为这是调用ArrayList.add()函数的正确方法

完整代码以防万一:

if (bsh.shared.names == void){
  bsh.shared.names = new java.util.ArrayList();
}
String[] arr = vars.get("fruits").split(",");
for (int i = 0; i < arr.length; i++) {
  if (arr[i].contains("APPLE")) {
      bsh.shared.names.add(arr[i]);
  }
}

还要注意starting from JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language是因为Groovy performance is much higher

Groovy中没有bsh.shared命名空间,但是您应该可以使用props的简写形式,它将为您提供相同的技巧。