JMeter如何动态生成含多数组数据的JSON请求并单次发送?
JMeter动态生成JSON请求方案
可以实现,通过JSR223 PreProcessor编写Groovy脚本,动态拼接包含所有元素的JSON请求体,在单个请求中发送。具体步骤如下:
1. 确认数组变量提取完成
确保你通过GET请求提取的三个数组已存储为JMeter变量,例如:
- ISBN数组:
isbn_1、isbn_2...isbn_N,且有isbn_matchNr记录数组长度 - Price数组:
price_1、price_2...price_N,对应price_matchNr - Publisher数组:
pub_1、pub_2...pub_N,对应pub_matchNr - 公共变量:
publisherName
2. 添加JSR223 PreProcessor
在需要发送JSON的HTTP请求前添加JSR223 PreProcessor,选择Groovy语言(性能最优),编写以下脚本:
// 获取公共出版商名称 def publisherName = vars.get("publisherName") // 获取数组长度(假设三个数组长度一致,取其中一个即可) def arrayLength = vars.get("isbn_matchNr") as int // 初始化books数组 def booksList = [] // 循环生成每个book对象 for (int i = 1; i <= arrayLength; i++) { def bookItem = [ "publisher": publisherName, "ISBN": vars.get("isbn_" + i), "Price": vars.get("price_" + i) as BigDecimal, // 转为数字类型,根据实际需求调整 "Publisher": vars.get("pub_" + i), "fixedValue": 100 // 固定值100,可自定义字段名 ] booksList.add(bookItem) } // 构建完整请求JSON def requestJson = [ "books": booksList ] // 将JSON字符串存入变量,供请求体引用 vars.put("dynamicRequestBody", new groovy.json.JsonBuilder(requestJson).toString())
3. 配置HTTP请求体
在HTTP请求的Body Data中,直接引用生成的变量:
${dynamicRequestBody}
注意事项
- 若三个数组长度不一致,可在脚本中添加长度校验逻辑,例如取最小长度作为循环上限
- 字段类型需与接口要求匹配,例如Price若为数字类型,需通过
as BigDecimal或as int转换,避免JSON中出现字符串格式的数字 - 替换脚本中的变量名(如
isbn_、price_)为你实际提取的变量前缀
内容的提问来源于stack exchange,提问作者BigPete
相关产品推荐
相关产品推荐

