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

如何在ForEach Controller中使用数组数据?跨线程组传递equipmentNumber

跨线程组共享多值equipmentNumber + ForEach Controller实现方案

第一步:第一个线程组把提取到的equipmentNumber存为全局属性

  1. 配置JSON Extractor:

    • 变量名填equipmentNumber
    • JSON Path表达式根据接口返回结构写,比如$..equipmentNumber(确保能匹配所有equipmentNumber字段)
    • 匹配数字选-1(提取所有符合条件的项)
      配置完成后,JMeter会自动生成equipmentNumber_1、equipmentNumber_2...这类变量,还有equipmentNumber_matchNr(记录提取结果的总数量)。
  2. 在JSON Extractor所在的请求后添加JSR223 PostProcessor,用Groovy代码将变量存入全局属性(实现跨线程组访问):

    def totalCount = vars.get("equipmentNumber_matchNr") as int
    // 先存储总数量
    props.put("equipmentTotal", totalCount.toString())
    // 逐个存储每个equipmentNumber
    for (int i = 1; i <= totalCount; i++) {
        def num = vars.get("equipmentNumber_" + i)
        props.put("equipmentNumber_" + i, num)
    }
    

第二步:第二个线程组用ForEach Controller遍历使用

  1. 在第二个线程组最前端添加JSR223 PreProcessor,把全局属性同步成本地线程组变量(ForEach Controller仅识别当前线程组的变量):

    def total = props.get("equipmentTotal") as int
    vars.put("equipmentNumber_matchNr", total.toString())
    for (int i = 1; i <= total; i++) {
        def num = props.get("equipmentNumber_" + i)
        vars.put("equipmentNumber_" + i, num)
    }
    
  2. 添加ForEach Controller并配置参数:

    • 输入变量前缀:equipmentNumber
    • 输出变量名:currentEquipment(自定义名称,用于存储每次循环拿到的单个编号)
    • 循环起始索引:1
    • 循环结束索引:留空(自动读取equipmentNumber_matchNr的数值)
    • 勾选"Add "_"" before number(保持默认勾选,和我们的变量命名格式匹配)
  3. 在ForEach Controller内部放置需要使用编号的请求,直接用${currentEquipment}引用当前循环的equipmentNumber即可,控制器会自动遍历所有提取到的编号。

额外需求:让第二个线程组多用户各用一个编号

如果第二个线程组开启了多线程(模拟多用户),想让每个用户对应不同的equipmentNumber,可不用ForEach Controller:

  1. 先完成上述全局属性同步步骤。
  2. 在请求中用以下函数引用编号:
    ${__groovy(props.get("equipmentNumber_" + (ctx.getThreadNum() + 1)),)}
    
    线程号从0开始,+1后刚好对应equipmentNumber_1、equipmentNumber_2...,实现每个线程匹配唯一编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:10:56