如何从单个JSON文件读取多组数据并用于API请求体
用单个JSON文件实现多线程/用户的请求体参数化(替代CSV)
完全可以用单个JSON文件替代CSV,实现不同线程/用户使用不同请求体参数的效果,尤其适合请求体包含嵌套结构的场景。下面是具体实现步骤:
实现方法(以JMeter为例)
1. 准备JSON数据文件
使用你提供的数组格式JSON文件,每组对象对应一套请求体参数:
[ { "album": "The White Stripes", "year": 1999, "US_peak_chart_post": "-" }, { "album": "De Stijl", "year": 2000, "US_peak_chart_post": "-" }, { "album": "White Blood Cells", "year": 2001, "US_peak_chart_post": 61 } ]
2. 添加JSR223 Sampler解析JSON并设置变量
在HTTP Request采样器之前添加JSR223 Sampler,选择Groovy作为脚本语言,写入以下脚本:
// 读取JSON文件(替换为你的文件绝对/相对路径) def jsonFile = new File("./test_data.json") def jsonSlurper = new groovy.json.JsonSlurper() def dataList = jsonSlurper.parse(jsonFile) // 根据线程编号分配对应数据,取模实现循环复用 def threadIndex = ctx.getThreadNum() def currentData = dataList[threadIndex % dataList.size()] // 将参数设置为JMeter变量,供后续请求调用 vars.put("album", currentData.album.toString()) vars.put("year", currentData.year.toString()) vars.put("US_peak_chart_post", currentData.US_peak_chart_post.toString())
3. 在HTTP Request中调用变量
在HTTP Request的Body Data里,直接使用${变量名}引用参数:
{ "album": "${album}", "year": ${year}, "US_peak_chart_post": "${US_peak_chart_post}" }
注意事项
- 文件路径:可以用绝对路径(如
C:/jmeter/test_data.json),也可以用相对JMeter bin目录的路径 - 数据复用:
threadIndex % dataList.size()保证当线程数超过JSON数据组数时,循环使用现有数据 - 复杂结构支持:如果请求体需要嵌套对象或数组,JSON文件可以直接对应结构,解析后直接提取嵌套字段即可,这比CSV更灵活
内容的提问来源于stack exchange,提问作者Putt
相关产品推荐
相关产品推荐

