groovy - 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”的多次迭代。
解决方案
要在 JMeter 中使用 ArrayList,请使用以下方法:
- 测试计划将如下所示,第一个 Sampler 具有初始化 ArrayList 的 JSR223 预处理器。而控制器有第二个采样器和访问 ArrayList 的 JSR223 后处理器。
第一个采样器中的 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,)}
。这将仅针对单个循环运行,因为${flow}
在 JSR223 后处理器中将设置为 falseJSR223 后处理器在 While 控制器下的第二个采样器内。将以下代码放在脚本区域。这是您可以访问 ArrayList 的方式
ArrayList result = vars.getObject("List"); for (String value : result) { log.info("Values are : " + value); } vars.put("flow", "false");
推荐阅读
- .net - Weebhooks handlers 如何通过不同的 webhookhandlers 处理不同的事件
- r - 如何在 R 中构建适当的条形图和分面网格
- r - 错误:包“aomisc”的延迟加载失败
- python - 如果我在 mydjango 网站中对 production.env 进行了更改怎么办。当我加载我的网站时,Google 会出现超时错误
- javascript - 如何限制由`window.postMessage()`事件调用的函数
- jenkins - ZAP Jenkins 作业中不支持的选项错误
- sql - 将 B 类型的值添加到相同 org_id 的 A 类型
- opencv - 如何使用 openCV 和 python tesseract 对具有白色前景的文本进行 ocr
- shell - 运行 shell 以检查服务器列表中是否存在目录并在文件中获取输出
- reactjs - 将选定的值传回给父组件 React Hook