在线程组内部,我有“ 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”的多个迭代中使用该列表。
答案 0 :(得分:0)
要在JMeter中使用ArrayList,请使用以下方法:
JSR223预处理器。将以下代码放入脚本区域
import java.util.List;
List<String> list = new ArrayList<>();
list.add("John");
list.add("Peter");
list.add("Parkar");
vars.putObject("List",list);
控制器条件为${__BeanShell(${flow}==true,)}
时。这将仅在单循环中运行,因为在JSR223后处理器中${flow}
将设置为false
JSR223后处理器在While控制器下的第二个采样器中。将以下代码放在脚本区域中。这是您访问ArrayList的方式
ArrayList result = vars.getObject("List");
for (String value : result) {
log.info("Values are : " + value);
}
vars.put("flow", "false");
答案 1 :(得分:0)
您的Groovy代码本身没有错:
您的JSR223 Pre Processor
可能由于某种原因而没有执行,可能是由于Scoping Rules或缺少了Sampler所致,因为没有采样器就无法执行预处理器。尝试在预处理器的末尾添加log.info('something')
,以确保它已运行。