You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:10:34