首页 > 解决方案 > JMeter - 在 jsr 223 预处理器中设置的变量在控制器中不可用

问题描述

在线程组内,我有“jsr 223 预处理器”,我在其中设置这样的变量 -

List<String> EDPResultList = new ArrayList();
vars.putObject("EDPResultList",EDPResultList);

然后在 while 控制器中,我有一个“HTTP 请求采样器”。为了处理响应,我添加了一个“jsr 223 后处理器”,我试图像这样访问对象 -

Object resObj = vars.getObject("EDPResultList");

我得到了例外 -

“错误 oajeJSR223PostProcessor:JSR223 脚本中的问题,初始获取 javax.script.ScriptException 的 JSR223 PostProcessor:groovy.lang.MissingPropertyException:没有这样的属性:类的 EDPResultList:Script238 在 org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl. java:324) ~[groovy-all-2.4.16.jar:2.4.16]"

如何定义一个列表,我可以在我的“线程组”中使用该列表以及“While Controller”的多次迭代。

标签: groovyjmeterjsr223

解决方案


要在 JMeter 中使用 ArrayList,请使用以下方法:

  1. 测试计划将如下所示,第一个 Sampler 具有初始化 ArrayList 的 JSR223 预处理器。而控制器有第二个采样器和访问 ArrayList 的 JSR223 后处理器。 在此处输入图像描述
  2. 第一个采样器中的 JSR223 预处理器。将以下代码放在脚本区域

    import java.util.List;
    
    List<String> list = new ArrayList<>();
    
    list.add("John");
    list.add("Peter");
    list.add("Parkar");
    
    vars.putObject("List",list);
    

    在此处输入图像描述

  3. 而控制器条件:${__BeanShell(${flow}==true,)}。这将仅针对单个循环运行,因为${flow}在 JSR223 后处理器中将设置为 false 在此处输入图像描述

  4. JSR223 后处理器在 While 控制器下的第二个采样器内。将以下代码放在脚本区域。这是您可以访问 ArrayList 的方式

    ArrayList result = vars.getObject("List");
    for (String value : result) {
    log.info("Values are : " + value);
    }
    vars.put("flow", "false");
    

    在此处输入图像描述

  5. 结果 在此处输入图像描述


推荐阅读