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

JMeter如何在同一会话中基于JSR223提取的账号ID数组生成多个HTTP请求体

问题解答

关于Simple Controller的实现能力

Simple Controller本身仅作为采样器分组的逻辑容器,不具备循环执行的能力,无法单独实现遍历数组生成多请求的需求,需要配合ForEach控制器实现。

具体实现步骤

  • 第一步:修改JSR223后置处理器代码
    你原有代码循环覆盖了同一个accountId变量,导致最终仅保留最后一个值,需要调整为按ForEach控制器可识别的格式存储变量:

    def accountIds = []
    
    for (int i=0; i < territoryTableDataList.size(); i++) {
        if (territoryTableDataList[i].change == "DROPPED") {
            accountIds.add(territoryTableDataList[i].id)
        }
    }
    // 存储数组长度供ForEach控制器识别
    vars.put("accountId_matchNr", accountIds.size().toString())
    // 按带索引的格式存储每个accountId
    for (int j=0; j < accountIds.size(); j++) {
        vars.put("accountId_" + (j+1), accountIds[j])
        log.info("*******************The account ID is: " + accountIds[j])
    }
    
  • 第二步:调整JMeter元件层级结构
    按如下顺序排列元件:

    前置请求(生成territoryTableDataList的接口请求)
    └── JSR223后置处理器(使用上述修改后代码)
    ForEach控制器
    └── 待测试的HTTP接口请求(可按需嵌套在Simple Controller内做分组)

    ForEach控制器配置项如下:

    • 输入变量前缀填写:accountId
    • 输出变量名称自定义,例如:currentAccountId
    • 勾选「Add "_" before number?」选项
  • 第三步:调整HTTP请求体
    把请求体内的${accountId}替换为ForEach控制器输出的变量${currentAccountId}即可,修改后的请求体如下:

    {
      "globalRequestId": "auto-perftest-00",
      "challengeReasons": [
        "other__c"
      ],
      "feedbackRemoveAccountRequests": [
        {
          "requestId": "auto-perftest-001",
          "accountId": "${currentAccountId}"
        }
      ]
    }
    

补充说明

如果循环内仅需要执行单个HTTP请求,无需额外添加Simple Controller;如果循环内需要同时执行多个关联请求,可以用Simple Controller将这些请求分组,方便维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:27:00