JMeter中Foreach Controller处理JSON数据失效问题排查
JMeter Foreach Controller未执行的问题解决方法
问题根源
Foreach Controller的工作机制是遍历前缀相同、后缀为数字索引的变量(如jsonVariable_1、jsonVariable_2),但你将整个JSON数组转成字符串存入了单个变量jsonVariable,不符合Foreach的遍历规则,因此循环不会执行。另外,JSR223脚本中直接使用${outVariable}也存在语法风险。
修正方案
方案一:拆分JSON数组适配Foreach Controller
在第一个JSR223 Sampler中,将JSON数组拆分为多个符合命名规则的变量:
def aboveJson = [ ["id":13059, "xid":"81f4278a53fe4c1a8d03346a34d76a47", "yid":"8cbefbadec52ced5:e4f6801:17c73aeaf21:-5a75"], ["id":13059, "xid":"061ef5792e8f4603bb1f86c71e6fb16c", "yid":"8cbefbadec52ced5:e4f6801:17c73aeaf21:-5a56"], ["id":13061, "xid":"4290987b25b34ffbb5b0329f1ab1b673", "yid":"8cbefbadec52ced5:e4f6801:17c73aeaf21:-5dd4"], ["id":13063, "xid":"57c4a2790aa44376be1e5215c5cb7ad0", "yid":"8cbefbadec52ced5:e4f6801:17c73aeaf21:-585e"] ] // 拆分数组为单独变量,命名为jsonVariable_1、jsonVariable_2... for (int i = 0; i < aboveJson.size(); i++) { vars.put("jsonVariable_" + (i + 1), new groovy.json.JsonBuilder(aboveJson[i]).toString()) } // 设置变量总数,Foreach需要此参数确定循环次数 vars.put("jsonVariable_", String.valueOf(aboveJson.size()))
Foreach Controller配置保持不变:
- InputVariable Prefix =
jsonVariable - Output variable name =
outVariable
内部JSR223 Sampler的输出代码修改为:
log.info(vars.get("outVariable"))
方案二:直接在JSR223脚本中遍历JSON字符串
如果不想拆分变量,可去掉Foreach Controller,直接在单个JSR223 Sampler中解析并遍历JSON数组:
第一个JSR223 Sampler代码不变:
vars.put("jsonVariable", new groovy.json.JsonBuilder(aboveJson).toString())
新增JSR223 Sampler处理遍历:
import groovy.json.JsonSlurper def jsonStr = vars.get("jsonVariable") def jsonArray = new JsonSlurper().parseText(jsonStr) jsonArray.each { item -> log.info(item.toString()) // 此处可添加对单个数组元素的业务逻辑处理 }
内容的提问来源于stack exchange,提问作者Jatin
相关产品推荐
相关产品推荐

