JMeter-在jsr 223预处理器中设置的变量在while控制器中不可用

时间:2019-09-22 11:04:07

标签: groovy jmeter jsr223

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

label

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

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

我遇到了例外-

“错误o.a.j.e.JSR223PostProcessor:JSR223脚本中的问题,初始获取的JSR223 PostProcessor javax.script.ScriptException:groovy.lang.MissingPropertyException:无此类属性:类:Script238的EDPResultList     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324)〜[groovy-all-2.4.16.jar:2.4.16]“

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

2 个答案:

答案 0 :(得分:0)

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

  1. 测试计划将如下所示,第一个采样器具有JSR223预处理器,用于初始化ArrayList。 Controller拥有第二个带有JSR223后处理器的采样器,可以访问ArrayList。 enter image description here
  2. 第一个采样器中的
  3. JSR223预处理器。将以下代码放入脚本区域

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

    enter image description here

  4. 控制器条件为${__BeanShell(${flow}==true,)}时。这将仅在单循环中运行,因为在JSR223后处理器中${flow}将设置为false enter image description here

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

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

    enter image description here

  6. 结果 enter image description here

答案 1 :(得分:0)

您的Groovy代码本身没有错:

enter image description here

您的JSR223 Pre Processor可能由于某种原因而没有执行,可能是由于Scoping Rules或缺少了Sampler所致,因为没有采样器就无法执行预处理器。尝试在预处理器的末尾添加log.info('something'),以确保它已运行。