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

如何递增JSON对象属性值以动态填充JMeter请求的JSON报文体

JMeter动态生成自增ID请求体实现方案

完全可以实现该需求,无需硬编码,推荐使用JMeter自带的JSR223预处理程序配合Groovy脚本实现,几百个对象的生成耗时可以忽略,性能表现优异。

具体操作步骤

  • 第一步:在需要发送该请求的HTTP取样器下,添加JSR223预处理程序
  • 第二步:JSR223预处理程序的语言选择groovy,在脚本框输入如下代码:
// 配置参数:按需修改单请求内的数组元素数量
def itemCount = 100
def jsonBuilder = new groovy.json.JsonBuilder()

jsonBuilder {
    key1 "value1"
    key2 {
        key21 (
            // 循环生成数组元素
            (1..itemCount).collect { i ->
                [
                    "key211_${i}": "valueA",
                    "key212_${i}": i.toString(),
                    "key213_${i}": [
                        "key2131_${i}": "valueB",
                        "key2132_${i}": "valueC"
                    ],
                    "key214_${i}": [
                        "key2141_${i}": "valueD",
                        "key2142_${i}": "valueE"
                    ]
                ]
            }
        )
    }
}

// 生成的完整JSON存入变量,供HTTP请求引用
vars.put("dynamicRequestBody", jsonBuilder.toPrettyString())
  • 第三步:将原HTTP取样器的请求体内容,直接替换为${dynamicRequestBody}即可

额外配置说明

  • 如果需要实现跨请求全局自增(比如第一个请求的最后一个ID是100,第二个请求从101开始计数),可以将计数器改为JMeter属性存储,修改脚本中的计数逻辑即可:
    // 初始化全局计数器,仅首次运行执行
    if (!props.get("globalIncrementId")) {
        props.put("globalIncrementId", 1)
    }
    def startId = props.get("globalIncrementId") as Integer
    // 循环生成时使用startId作为起始值,生成完成后更新全局计数器
    props.put("globalIncrementId", startId + itemCount)
    
  • Groovy内置的JsonBuilder会自动处理JSON格式转义,不会出现语法错误,不需要手动拼接字符串处理引号等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:03