如何递增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
相关产品推荐
相关产品推荐

