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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:09:58