添加JSON断⾔:

1. JSON 断言的作用
JMeter 的 JSON Assertion(JSON 断言) 用于验证 JSON 格式的响应 是否符合预期,适用于 API 测试(如 RESTful API),可以检查:
- JSON 中是否包含某个 键(key)
- JSON 的某个键值对是否符合预期
- JSON 是否符合特定的格式
2. JSON 断言的基本设置
在 JMeter HTTP 请求(HTTP Request) 之后,添加 JSON 断言: 右键 HTTP 请求 → 添加 → 断言(Assertions) → JSON 断言(JSON Assertion)
JSON 断言主要有以下配置项:
-
JSON Path Expression:指定要验证的 JSON 路径(JSONPath),如:
$.code→ 取code的值$.data.id→ 取data里面的id值$.data.content→ 取data里面的content值
-
Expected Value(期望值):填写期望的值,如果返回的值与此匹配,断言通过,否则失败。
-
Match as Regular Expressions(使用正则表达式):如果勾选,
Expected Value需要写成 正则表达式,而不是普通文本。 -
Expect null(期望为空):如果勾选,JMeter 断言目标 JSON 值应该 为空。
-
Invert assertion(反向断言):如果勾选,表示 期望 JSON 不匹配 预期值。

3. JSON 断言示例
示例 JSON 响应

{
"code": "SUCCESS",
"data": {
"deleteFlag": 0,
"loginUser": true,
"createTime": "2025-03-18 10:51",
"updateTime": "2025-03-18T02:51:28.000+00:00",
"id": 31178,
"title": "13213213213213213",
"userId": 2,
"content": "##在这里写下一篇博客"
},
"errMsg": ""
}
4. 常见 JSON 断言方式
方式 1:断言单个值
- 目标:检查
code是否等于"SUCCESS" - JSON Path Expression:
$.code - Expected Value:
SUCCESS - 结果:如果返回的
code为"SUCCESS",则断言通过,否则失败。
方式 2:断言数字类型
- 目标:检查
data.id是否等于31178 - JSON Path Expression:
$.data.id - Expected Value:
31178
方式 3:断言布尔类型
- 目标:检查
data.loginUser是否为true - JSON Path Expression:
$.data.loginUser - Expected Value:
true
方式 4:断言包含字符串
- 目标:检查
content是否包含"博客" - JSON Path Expression:
$.data.content - Expected Value:
.*博客.* - 勾选 "Use Regular Expressions"
方式 5:断言整个 JSON 结构
- 目标:检查
data的完整 JSON 内容 - JSON Path Expression:
$.data - Expected Value:
{"deleteFlag":0,"loginUser":true,"createTime":"2025-03-18 10:51","updateTime":"2025-03-18T02:51:28.000+00:00","id":31178,"title":"13213213213213213","userId":2,"content":"##在这里写下一篇博客"} - 不勾选 "Use Regular Expressions"(否则 JSON 需要转换为正则格式)
方式 6:断言 JSON Key 是否存在
- 目标:检查
data.userId是否存在 - JSON Path Expression:
$.data.userId - 勾选 "Expect null"(如果
userId不为空,断言通过)
5. JSON 断言的注意事项
-
JSONPath 必须正确
$代表根目录.访问子元素[*]代表列表- 例如:
$.data.id取data里的id$.data.items[*].name取data.items数组里所有name
-
勾选 "Use Regular Expressions" 时,
Expected Value需要写正则表达式"SUCCESS"→ 直接匹配字符串.*SUCCESS.*→ 使用正则表达式匹配{"id":\d+,"title":".+?"}→ 使用正则匹配 JSON
-
JSON 结构必须与实际响应一致
- 如果接口返回的 JSON 结构不同,断言会失败。
错误例子
如果勾选了Match as Regular Expressions 是让其匹配正则,但但如果只让它匹配没有特殊符号的话,也是可以成功的
比如我的数据是这个

现在对data里的title进行匹配
这是不会报错的
但如果我们匹配data,并且勾上了正则匹配

为什么会报错?
Expected Value 是:
{"deleteFlag":0,"loginUser":true,"createTime":"2025-03-18 10:51","updateTime":"2025-03-18T02:51:28.000+00:00","id":31178,"title":"13213213213213213","userId":2,"content":"##在这里写下一篇博客"}
但 JSON 本身不是正则表达式,它包含特殊字符(如 {、:、"),这些在正则表达式中是有特殊含义的,必须进行 转义,否则 JMeter 会解析失败并报错。
so
方法 1:不勾选 "Use Regular Expressions"(推荐)
JSON 响应格式是固定的,最简单的方法 就是 不要勾选 "Use Regular Expressions",然后直接输入 JSON:
{"deleteFlag":0,"loginUser":true,"createTime":"2025-03-18 10:51","updateTime":"2025-03-18T02:51:28.000+00:00","id":31178,"title":"13213213213213213","userId":2,"content":"##在这里写下一篇博客"}
这样 JMeter 直接进行 字符串匹配,如果 JSON 完全一致,则断言通过,否则失败。
方法 2:使用合法的正则表达式
如果你必须 勾选 "Use Regular Expressions",那么你的 JSON 需要 转换成合法的正则表达式,比如:
\{\s*"deleteFlag"\s*:\s*0,\s*"loginUser"\s*:\s*true,\s*"createTime"\s*:\s*"2025-03-18 10:51",\s*"updateTime"\s*:\s*"2025-03-18T02:51:28.000\+00:00",\s*"id"\s*:\s*31178,\s*"title"\s*:\s*"13213213213213213",\s*"userId"\s*:\s*2,\s*"content"\s*:\s*".+?"\s*\}
\{和\}:匹配大括号{}(必须加\进行转义)。\s*:匹配任意空格(为了兼容 JSON 可能存在的不同格式)。".+?":匹配任意字符串,例如content可能含有换行符等。\d+:匹配数字字段,如id和userId。
好麻烦看不懂喵
或许后面会写一篇讲正则?


1万+

被折叠的 条评论
为什么被折叠?



