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

JMeter中如何将每次HTTP请求后JsonExtractor的返回值存入数组供后续线程组使用

实现方案

该需求完全可以实现,以下是JMeter场景下的可落地操作步骤:

1. 初始化跨线程组的全局存储数组

  • 在线程组1的最顶部添加JSR223 前置处理器,写入初始化代码:
// 初始化全局数组,用props存储实现跨线程组读写
props.put("requestProtocolIdList", [])

此处必须使用JMeter的全局属性props存储,线程级变量vars仅在当前线程生效,无法跨线程组传递数据。

2. 每次请求完成后写入提取值

  • 在你已配置的JSON Extractor后新增JSR223 后置处理器,写入如下代码:
// 替换currentProtocolId为你在JSON Extractor中自定义的变量名
def currentId = vars.get("currentProtocolId")
// 非空校验避免无效值存入
if (currentId != null) {
    def idList = props.get("requestProtocolIdList")
    idList.add(currentId)
    props.put("requestProtocolIdList", idList)
}

该逻辑会在每次接口请求、提取到requestProtocolId后自动执行,逐个存入全局数组。

3. 下一个线程组调用存储的ID值

  • 首先确保测试计划中线程组1的排列顺序在需要调用ID的线程组2之前,保证执行顺序正确。
  • 如果需要逐个调用所有ID,可将线程组2的循环次数/线程数设置为和ID总数(此处为50)一致,在需要用到ID的请求前添加JSR223 前置处理器:
def idList = props.get("requestProtocolIdList")
// 按索引取值,循环场景下用__counter函数获取当前循环下标
def targetId = idList.get(${__counter(TRUE,)}-1)
vars.put("targetRequestProtocolId", targetId)
  • 后续请求参数中直接引用${targetRequestProtocolId}即可使用对应ID。

额外注意事项

  • 如果线程组1是并发执行请求,需要给数组写入操作加锁避免并发写入异常,串行请求无需额外处理。
  • 所有JSR223组件建议选择groovy作为脚本语言,执行效率更高。

内容的提问来源于stack exchange,提问作者QA_V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:05