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

JMeter中提取指定条件的ID数组并传递至下一线程组的方法

解决JMeter提取指定条件ID并传递到下一个线程组的方法

我之前也碰到过一模一样的需求,给你一步步拆解解决思路:

1. 用JSON Extractor精准提取符合条件的ID

首先在你的HttpRequest请求下方添加一个JSON Extractor(右键请求 → Add → Post Processors → JSON Extractor),然后按如下配置:

  • Reference Name:自定义一个变量名,比如 acceptedIds
  • JSON Path Expression:输入这个表达式:$..[?(@.Contract.Status.displayName == 'Accepted')].linearId.id
    简单解释下:
    • $..:递归遍历整个JSON结构,不用纠结层级嵌套的问题
    • [?(@.Contract.Status.displayName == 'Accepted')]:过滤出所有Contract.Status.displayName等于Accepted的对象
    • .linearId.id:提取这些对象里的linearId.id值
  • Match No.:填 -1(表示提取所有匹配结果,而非仅第一个)
  • Default Value:可以留空,或者填NO_MATCH方便后续排查问题

2. 将零散的ID拼成标准JSON数组

JMeter提取多值时,会生成acceptedIds_1、acceptedIds_2这类变量,还有acceptedIds_matchNr记录匹配总数。我们需要把这些零散值拼成标准JSON数组:

在JSON Extractor下方再添加一个JSR223 PostProcessor,脚本语言选择Groovy(Groovy性能远优于其他脚本语言),输入以下代码:

// 初始化空列表存储ID
def acceptedIdList = []
// 获取匹配到的ID总数
def totalMatches = vars.get('acceptedIds_matchNr') as int

// 遍历所有匹配项,添加到列表
for (int i = 1; i <= totalMatches; i++) {
    def currentId = vars.get("acceptedIds_${i}")
    acceptedIdList.add(currentId)
}

// 将列表转成JSON字符串,存入变量
def jsonArray = new groovy.json.JsonBuilder(acceptedIdList).toString()
vars.put('acceptedIdsArray', jsonArray)

执行后,acceptedIdsArray变量的值就会是["1234","7890"]这样的标准JSON数组格式。

3. 跨线程组传递变量

JMeter的线程组默认是隔离的,本地变量无法直接共享,所以需要借助JMeter的全局Properties来实现传递:

在当前线程组的JSR223 PostProcessor末尾加一行代码:

// 把数组变量存入全局Properties
props.put('globalAcceptedIds', jsonArray)

在下一个线程组读取全局变量

在下一个线程组开头添加一个JSR223 Sampler,同样选择Groovy,输入以下代码:

// 从全局Properties读取数组
def globalIds = props.get('globalAcceptedIds')
// 把全局变量存入当前线程组的本地变量,方便后续使用
vars.put('acceptedIdsFromOtherGroup', globalIds)

4. 验证结果

你可以在两个线程组里分别添加Debug Sampler,然后通过View Results Tree查看:

  • 当前线程组的acceptedIdsArray是否正确生成包含1234和7890的数组
  • 下一个线程组的acceptedIdsFromOtherGroup是否和上面的值一致

这样就能完美实现你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:02:32