JMeter如何发送JSON报文请求:详细指南
在接口测试中,JSON是最常用的数据交换格式之一,JMeter作为主流的性能测试工具,支持通过多种方式发送JSON报文请求,本文将详细介绍JMeter中发送JSON报文的几种常用方法、配置步骤及注意事项,帮助您快速JSON请求的实践技巧。
使用HTTP请求默认值+HTTP请求(基础方法)
适用场景
当测试计划中大部分请求的协议、服务器IP、端口相同时,可通过“HTTP请求默认值”统一配置,再结合“HTTP请求”元件发送JSON报文。
操作步骤
-
添加HTTP请求默认值
- 在测试计划右键 → 添加 → 配置元件 → HTTP请求默认值。
- 配置基础信息:
- 服务器名称或IP:目标服务器地址(如
http://api.example.com) - 端口号:API服务端口(如80、443)
- 协议:
http或https
- 服务器名称或IP:目标服务器地址(如
-
添加HTTP请求
- 在线程组右键 → 添加 → 采样器 → HTTP请求。
- 配置请求关键参数:
- 协议:若与默认值不同,可单独设置(通常保持默认)。
- 方法:选择
POST(JSON请求多为POST,也可根据API选择PUT、PATCH等)。 - 路径:API接口路径(如
/user/login)。
-
设置JSON报文
- 在“HTTP请求”中切换到“消息体数据”(Body Data)选项卡。
- 直接输入JSON格式的报文内容(需确保格式正确,如键值对用双引号包裹):
{ "username": "test_user", "password": "123456", "email": "test@example.com" }
注意事项
- JSON报文需严格遵循语法,避免遗漏逗号、引号或括号,否则可能导致请求失败。
- 若报文中包含动态数据(如随机用户名),需通过JMeter函数(如
${__Random()})或参数化实现。
使用HTTP信息头管理器(设置Content-Type)
适用场景
API服务端通常要求请求头明确指定Content-Type为application/json,否则可能无法正确解析JSON报文,需通过“HTTP信息头管理器”添加请求头。
操作步骤
-
添加HTTP信息头管理器
- 在“HTTP请求”节点右键 → 添加 → 配置元件 → HTTP信息头管理器。
- 点击“添加”按钮,设置键值对:
- 名称:
Content-Type - 值:
application/json
- 名称:
-
验证请求头
- 执行请求后,查看“查看结果树”中的“请求”选项卡,可确认请求头是否包含
Content-Type: application/json。
- 执行请求后,查看“查看结果树”中的“请求”选项卡,可确认请求头是否包含
关键点
Content-Type必须与报文格式一致,若发送的是表单数据(x-www-form-urlencoded),则需设置为application/x-www-form-urlencoded,而非JSON格式。- 若API需要其他自定义请求头(如
Authorizationtoken),可在同一“HTTP信息头管理器”中添加。
使用参数化+CSV数据文件(动态JSON报文)
适用场景
当需要测试多组JSON数据(如不同用户登录、商品信息变更)时,可通过CSV文件参数化,实现动态报文发送。
操作步骤
-
准备CSV数据文件
- 创建CSV文件(如
test_data.csv),列名需与JSON报文字段对应:username,password,email user1,pass1,user1@example.com user2,pass2,user2@example.com user3,pass3,user3@example.com
- 创建CSV文件(如
-
配置CSV Data Set Config
- 在线程组右键 → 添加 → 配置元件 → CSV Data Set Config。
- 设置参数:
- 文件名:CSV文件路径(支持绝对路径和相对路径,建议将CSV文件放在测试计划同目录,使用
${__P(user.dir)}/test_data.csv) - 变量名:与CSV列名一致(如
username, password, email) - 是否忽略首行:勾选(跳过CSV表头)
- 分隔符:逗号(,根据CSV文件实际分隔符调整)
- 文件名:CSV文件路径(支持绝对路径和相对路径,建议将CSV文件放在测试计划同目录,使用
-
修改JSON报文为参数化形式
- 在“HTTP请求”的“消息体数据”中,使用
${变量名}引用CSV数据:{ "username": "${username}", "password": "${password}", "email": "${email}" }
- 在“HTTP请求”的“消息体数据”中,使用
-
设置线程数与CSV数据关联
- 线程组的线程数需与CSV数据行数匹配(如CSV有3行数据,线程数设为3,每个线程读取一行)。
- 若需循环读取CSV,可在CSV Data Set Config中勾选“停止文件结尾时循环”。
验证方法
- 执行测试后,查看“查看结果树”的“响应数据”,确认每个请求是否发送了不同的JSON数据。
使用JSON Extractor+后置处理器(响应数据关联)
适用场景
当JSON请求的报文需要依赖前一个请求的响应结果(如登录后获取token,将token加入后续请求)时,可通过“JSON Extractor”提取响应数据,再嵌入JSON报文。
操作步骤
-
添加JSON Extractor
- 在前一个请求(如登录请求)的右键 → 添加 → 后置处理器 → JSON Extractor。
- 配置提取规则:
- 名称:自定义(如
extract_token) - 要提取的JSON表达式:根据响应JSON结构填写(如
$.data.token,表示提取data对象下token字段的值) - 匹配数字:
0(提取第一个匹配项) - 默认值:若未提取到则返回的值(如
null)
- 名称:自定义(如
-
将提取的值嵌入JSON报文
- 在后续请求的“消息体数据”中,使用
${提取的变量名}引用数据:{ "token": "${token}", "request_id": "${__Random(1000, 9999)}" }
- 在后续请求的“消息体数据”中,使用
-
验证提取结果
在“查看结果树”中,查看JSON Extractor的“结果”选项卡,确认是否成功提取数据。
关键点
- JSON表达式需准确对应响应JSON结构(可通过“查看结果树”的“JSON”选项卡查看响应格式)。
- 若响应数据为嵌套JSON(如
{"code": 200, "message": "success", "data": {"token": "abc123"}}),表达式需写为$.data.token。
使用JSR223 Sampler+Groovy脚本(复杂JSON构建)
适用场景
当JSON报文结构复杂(包含动态嵌套对象、数组或需通过逻辑计算生成字段)时,可通过JSR223 Sampler结合Groovy脚本动态构建JSON。
操作步骤
-
添加JSR223 Sampler
- 在线程组右键 → 添加 → 采样器 → JSR223 Sampler。
- 语言选择
groovy。
-
编写Groovy脚本构建JSON
-
使用Groovy的
JsonBuilder或JsonOutput生成JSON:// 方式1:JsonBuilder(构建嵌套JSON) def builder = new JsonBuilder() builder { username "user_${__Random(1000, 9999)}" password "pass_${__time()}" hobbies ["reading", "coding", "traveling"] // 数组 address( city "Beijing", district "Haidian" ) } // 将JSON设置为请求消息体 prev.setResponseData(builder.toString()) // prev表示当前请求 // 方式2:JsonOutput(通过Map构建) def jsonMap = [ "order_id": "${__UUID()}", "products": [ ["id": 1, "name": "Laptop", "price": 5999], ["id": 2, "name": "Mouse", "price": 99] ], "total": 6098 ] def jsonString = JsonOutput.toJson(jsonMap) prev.setResponseData(jsonString)
-
-
配置HTTP请求发送脚本生成的JSON
- 若通过JSR223 Sampler生成JSON,可直接在该采样器中发送请求(需勾选“发送文件和数据”)。
- 若需在其他HTTP请求中使用,可将脚本生成的JSON保存为变量,再通过`${变量名



还没有评论,来说两句吧...