JMeter JSON断言讲解和错误用例

添加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 断言主要有以下配置项:

  1. JSON Path Expression:指定要验证的 JSON 路径(JSONPath),如:

    • $.code → 取 code 的值
    • $.data.id → 取 data 里面的 id
    • $.data.content → 取 data 里面的 content
  2. Expected Value(期望值):填写期望的值,如果返回的值与此匹配,断言通过,否则失败。

  3. Match as Regular Expressions(使用正则表达式):如果勾选,Expected Value 需要写成 正则表达式,而不是普通文本。

  4. Expect null(期望为空):如果勾选,JMeter 断言目标 JSON 值应该 为空

  5. 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 ValueSUCCESS
  • 结果:如果返回的 code"SUCCESS",则断言通过,否则失败。

方式 2:断言数字类型
  • 目标:检查 data.id 是否等于 31178
  • JSON Path Expression$.data.id
  • Expected Value31178

方式 3:断言布尔类型
  • 目标:检查 data.loginUser 是否为 true
  • JSON Path Expression$.data.loginUser
  • Expected Valuetrue

 方式 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 断言的注意事项
  1. JSONPath 必须正确

    • $ 代表根目录
    • . 访问子元素
    • [*] 代表列表
    • 例如:
      • $.data.iddata 里的 id
      • $.data.items[*].namedata.items 数组里所有 name
  2. 勾选 "Use Regular Expressions" 时,Expected Value 需要写正则表达式

    • "SUCCESS"  → 直接匹配字符串
    • .*SUCCESS.*  → 使用正则表达式匹配
    • {"id":\d+,"title":".+?"}  → 使用正则匹配 JSON
  3. 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+:匹配数字字段,如 iduserId

好麻烦看不懂喵

或许后面会写一篇讲正则?

### 添加 JSON 断言的步骤 在 JMeter 中进行接口测试时,若需要验证响应数据中的特定字段值是否符合预期,可以使用 **JSON 断言** 来实现。以下是添加 JSON 断言的具体步骤: 1. **创建测试计划** - 首先,在 JMeter 的测试计划中添加一个线程组(Thread Group),用于组织测试用。 - 在该线程组下添加 HTTP 请求(HTTP Request)以模拟对目标接口的调用。 2. **配置 HTTP 请求** - 如,假设目标 URL 是 `https://data.cma.cn/weatherGis/web/weather/weatherFcst/getCurrentCondition`,请求方法为 POST。 - 在请求体中设置参数 `staId: 54511` [^2]。 3. **添加 JSON 断言** - 右键点击 HTTP 请求,选择 **添加 > 断言 > JSON 断言**。 - 在断言组件中,填写以下关键信息: - **JSON Path**: 输入需要校验的字段路径,如 `$..v01301`。 - **Expected Value**: 填写期望值,如 `"54511"`。 - **Match Rules**: 可选是否匹配整个对象或仅某个字段值。 - 如果需要判断多个字段,则可以添加多个 JSON 断言分别验证不同的字段 [^3]。 4. **添加监听器** - 为了查看测试结果,建议在线程组中添加监听器(Listener),如 **查看结果树**、**聚合报告** 或 **图形结果**。 - 当运行测试时,如果 JSON 断言失败,JMeter 将标记该请求为失败,并显示错误信息 [^2]。 ### 示:验证 JSON 响应字段 以下是一个具体的 JSON 断言配置示: ```json { "v01301": "54511", "v13003": 71, "v12001": 24.3, "v13011": 0.0 } ``` - 若想验证 `v01301` 字段的值是否为 `"54511"`,则 JSON Path 应设置为 `$..v01301`,期望值为 `"54511"`。 - 若故意将期望值修改为 `"545111"`,JMeter 会检测到不匹配并提示断言失败 [^3]。 ### 注意事项 - 确保响应数据是有效的 JSON 格式,否则 JSON 断言无法正确解析内容 。 - JSON 断言支持嵌套结构数组,可以通过 JSON Path 表达式精准定位字段 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值