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

JMeter中从JSON响应提取参数并按每20条一组动态生成后续请求的实现方案咨询

JMeter动态分批请求实现方案(按顺序拆分20条/批)

没问题,我帮你梳理出一套完全适配需求的实现方案,完美解决动态分批、顺序保留的问题,一步步来很清晰:

1. 先把前置响应的目标数据全提出来

首先得从前置请求的JSON响应里把DegreeProviderId和Type都捞出来,用JSON Extractor最省心:

  • 右键前置请求 → 「添加」→ 「后置处理器」→ 「JSON Extractor」
  • 配置参数:
    • 引用名称:degreeData(随便起,记住就行)
    • JSON Path表达式:$..['DegreeProviderId','Type'] (这个表达式会按响应顺序,把每个对象里的这两个字段打包成JSON串)
    • 匹配数字:填-1(意思是提取所有匹配的记录,不管多少条)
    • 默认值:空着就行

配置完后,JMeter会自动生成一堆变量:比如degreeData_1对应第一条记录的DegreeProviderId和Type,degreeData_matchNr是提取到的总记录数,这个变量后面要用来算批次。

2. 算清楚需要发多少个后续请求

接下来要根据总记录数,算出需要分几批(比如100条分5批,105条分6批)。加一个JSR223 PreProcessor到测试计划根节点(或者前置请求后面),用Groovy脚本计算:

// 拿到总记录数
def totalRecords = vars.get("degreeData_matchNr") as int
// 每批最多20条
def batchSize = 20
// 向上取整算总批次:比如105条的话,(105+20-1)/20=6.2 → 转成int就是6
def totalBatches = (totalRecords + batchSize - 1) / batchSize as int
// 把结果存成变量,后面循环要用
vars.put("totalBatches", totalBatches.toString())
vars.put("batchSize", batchSize.toString())

3. 用循环控制器动态生成请求

加一个Loop Controller(循环控制器),把后续的HTTP请求拖进去:

  • 循环次数填${totalBatches},这样就会根据总批次自动循环多少次,完全不用手动改。

4. 给每个批次生成对应的请求体

在后续的HTTP请求里加一个JSR223 PreProcessor,写脚本生成当前批次的请求体:

def batchSize = vars.get("batchSize") as int
// 拿到当前是第几批(Loop控制器的索引从0开始,所以要+1)
def currentBatch = vars.get("__jm__Loop Controller__idx") as int + 1
def totalRecords = vars.get("degreeData_matchNr") as int

// 计算当前批次的起始和结束索引
def startIndex = (currentBatch - 1) * batchSize + 1
def endIndex = Math.min(currentBatch * batchSize, totalRecords)

// 组装请求体
def requestBody = []
for (int i = startIndex; i <= endIndex; i++) {
    // 解析之前提取的单条数据
    def singleData = new groovy.json.JsonSlurper().parseText(vars.get("degreeData_" + i))
    // 转换成你要的格式
    def item = [
        "Id": singleData.DegreeProviderId,
        "Type": singleData.Type,
        "IsValued": false,
        "Comment": ""
    ]
    requestBody.add(item)
}

// 把组装好的JSON串存成变量,后面请求体直接用
vars.put("requestBody", new groovy.json.JsonBuilder(requestBody).toPrettyString())

5. 配置后续请求的请求体

在后续HTTP请求的「Body Data」里,直接写${requestBody}就行,JMeter会自动把变量替换成对应的JSON数组。

验证一下逻辑

  • 如果前置返回100条:Loop循环5次,每个请求体正好20条,顺序和响应完全一致
  • 如果前置返回105条:Loop循环6次,前5个请求各20条,第6个请求只带最后5条
  • 不管总记录数是多少,都能自动适配,不用改任何配置

小提示

  • 要是怕配置错了,可以加个Debug Sampler,把所有变量都打出来看看,方便调试
  • 确保前置请求的响应是标准JSON格式,不然JSON Extractor可能提不出数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:49:03