JMeter技术问题:无法从嵌套数组提取la_message_code值
解决方案
1. 提取所有la_message_code字段
假设你已将payload列表存入JMeter变量payloadList,在JSR223脚本里用Groovy解析并提取目标字段:
// 获取整理好的payload列表 def payloads = vars.getObject("payloadList") def receivedMessageIds = [] payloads.each { payload -> // 若payload是字符串,先解析为JSON对象;若已是JSON对象可跳过此步 def jsonObj = new groovy.json.JsonSlurper().parseText(payload) // 提取la_message_code,根据实际JSON结构调整路径,比如嵌套的话用jsonObj.data.la_message_code def messageCode = jsonObj.la_message_code if (messageCode) { receivedMessageIds.add(messageCode) } } // 将提取到的ID列表存入变量,供后续对比使用 vars.putObject("receivedMessageIds", receivedMessageIds)
2. 对比发送与接收的消息ID
假设发送的messageId列表存在变量sentMessageIds中,继续在JSR223脚本里完成校验:
def sentIds = vars.getObject("sentMessageIds") def receivedIds = vars.getObject("receivedMessageIds") // 找出所有未被接收的消息ID def missingIds = sentIds.findAll { !receivedIds.contains(it) } if (missingIds.isEmpty()) { log.info("所有消息均已成功送达") SampleResult.setSuccessful(true) } else { def errorMsg = "未送达的消息ID:${missingIds.join(', ')}" log.error(errorMsg) SampleResult.setSuccessful(false) SampleResult.setResponseMessage(errorMsg) }
关键注意点
- 确认
la_message_code在payload中的实际层级,如果是嵌套结构,要修改脚本里的提取路径(比如jsonObj.payload.details.la_message_code)。 - 优先用Groovy编写JSR223脚本,JMeter对Groovy的性能支持和语法兼容性最优。
- 可以直接把校验逻辑放在JSR223断言组件中,这样校验失败时会直接标记当前采样点为失败,更符合负载测试的断言需求。
内容的提问来源于stack exchange,提问作者Amphata
相关产品推荐
相关产品推荐

