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

如何在JMeter中从JSON文件随机选取数据作为请求体?

在JMeter中实现请求体随机选取JSON对象的方法

首先要指出:你提供的JSON格式存在语法问题——重复的"claim"键会导致解析失败,正确的格式应该是把多个claim对象放到数组里,示例如下:

{
"claims": [
{"data1": "point1", "data2": "point2"},
{"data1": "point3", "data2": "point4"}
]
}

下面是几种可行的实现方案:

方案1:JSR223前置处理器(最常用且灵活)

  • 给目标HTTP请求添加JSR223前置处理器
  • 脚本语言选择Groovy(性能远优于其他语言)
  • 写入以下脚本:
// 读取JSON文件内容,替换为你的文件路径
def jsonContent = new File("claims.json").text
def jsonData = new groovy.json.JsonSlurper().parseText(jsonContent)

// 生成随机索引,选取一个claim对象
def randomIdx = new Random().nextInt(jsonData.claims.size())
def selectedClaim = jsonData.claims[randomIdx]

// 将选中的对象转为JSON字符串,存入JMeter变量
vars.put("randomClaim", new groovy.json.JsonBuilder(selectedClaim).toString())
  • 在HTTP请求的请求体中,直接引用变量 ${randomClaim} 即可

方案2:JSON提取器+随机函数

  • 先添加HTTP请求(如果JSON文件在本地,可使用File Reader读取内容到变量),再添加JSON Extractor:
    • 引用名称:claim
    • JSON Path表达式:$.claims[*]
    • 匹配数字:-1(提取所有claim对象)
  • 此时JMeter会生成claim_1、claim_2...等变量,对应每个claim对象
  • 在请求体中使用${__RandomFromMultipleVars(claim_1,claim_2,claim_3,)},即可随机选取其中一个变量的值作为请求体

方案3:全局预加载(高并发场景优化)

如果测试并发量高,不想每次请求都读取文件,可提前加载所有claim到全局属性:

  1. 在测试计划开头添加JSR223 Sampler,写入脚本:
def jsonContent = new File("claims.json").text
def jsonData = new groovy.json.JsonSlurper().parseText(jsonContent)
// 把所有claim存入全局属性
props.put("allClaims", jsonData.claims)
  1. 给目标请求添加JSR223前置处理器,写入脚本:
def allClaims = props.get("allClaims")
def randomIdx = new Random().nextInt(allClaims.size())
def selectedClaim = allClaims[randomIdx]
vars.put("randomClaim", new groovy.json.JsonBuilder(selectedClaim).toString())
  1. 请求体中依然引用 ${randomClaim}

注意事项

  • 确保JSON文件路径正确:用绝对路径,或者相对JMeter启动目录的相对路径
  • 高并发场景优先用方案3,避免频繁IO操作影响性能
  • 可添加Debug Sampler查看变量是否正确生成,验证效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:57:30