提问者:小点点

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


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

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

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

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

我得到了例外 -

“ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor For Initial Get javax.script.ScriptException: groovy.lang.MissingPropertyException: no such property: EDPResultList for class: Script238 at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]”

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


共2个答案

匿名用户

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

import java.util.List;

List<String> list = new ArrayList<>();

list.add("John");
list.add("Peter");
list.add("Parkar");

vars.putObject("List",list);

JSR223后处理器位于第二个采样器内,同时控制器。将以下代码放在脚本区域中。这是访问数组列表的方法

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

匿名用户

你的Groovy代码本身没有任何问题:

很可能由于某种原因,您的JSR223预处理器没有被执行,要么是由于范围规则,要么是缺少采样器,因为没有采样器就无法执行预处理器。尝试在预处理器的末尾添加 log.info('something'),以确保它已运行。