添加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
。
好麻烦看不懂喵
或许后面会写一篇讲正则?