首页 > 解决方案 > 无法使用 bsh.shared 在 JMeter 中的线程组之间共享数组

问题描述

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

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

  1. 线程组1
    • 采样器1
      • Beanshell-PostProcessor1
  2. 线程组2
    • 采样器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 时,它不会返回值。

标签: jmeterbeanshell

解决方案


您的代码存在多个问题,即:

  1. 您需要替换split(',')为,split(",")因为String.split()函数将 String 作为参数并且您提供了一个 char
  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]);
  }
}

另请注意,从 JMeter 3.1 开始,建议使用 JSR223 测试元素和 Groovy 语言,因为Groovy 性能要高得多

Groovy 中没有bsh.shared命名空间,但是您应该能够使用props简写代替,它会为您做同样的事情。


推荐阅读