首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

responses-validator接口断言之JSON

requests 中响应正文 json 和响应正文 text 不同:

text 是一个字符串

json 是一个 json 对象

对于 json 对象,responses-validator 可以进行更灵活的断言,

比如只对其中的部分字段进行断言,或者只对 json 对象的 schema 断言

1. 断言部分字段

首先,json 如 text、headers 一样,断言均是可选的,可以留空。

其次,json 响应中字段较多,可以只对部分字段进行断言

假设某接口返回 JSON 如下

其中age字段表示年龄,其值会随着时间动态变化

在编写断言时,可仅对其中 2 个字段进行断言

yaml 写法如下

执行结果如下:

图 1. 对于 JSON 部分字段断言

2. 断言完全匹配

如果期望接口返回只包含指定字段,而不包括 age 字段

在 responses-validator 可以使用【same】模式,则只有接口返回下面一模一样的内容才会断言成功,

多了字段或少了字段,或字段内容不一样,均会失败

这里一模一样特指:字段名称及字段值,字段顺序无需一样

在这个例子中,如果接口返回以下内容,则断言通过

如果接口返回以下内容,则断言失败

{ "name": "sanmu" # 失败:缺少email字段}

3. 断言 schema 匹配

在前文中,接口响应的 json 正文中,动态变化的字段被忽略,从而使其他字段能够顺利断言

那么,可不可以对对动态字段也进行断言呢?

例如,虽然我们不知道每次响应age字段返回的数字多少,

但是我们至少知道:

字段的名称是age

字段的类型是int

这些信息称之为schema,

在 responses-validator 可以使用【schema】模式,断言 JSON 的字段和类型

具体示例:

#tests/test_json_schema.yamltest_name: 断言json响应schema

steps: - request: method: get url: https://api.tttt.one/rest-v1/get_user

- response: status_code: 200 json: value: name: abc # 断言包含name字段,并且是字符类型 age: 0 # 断言包含age字段,并且是数字类型 email: # 断言包含email字段,并且是字符类型 mode: schema # 断言模式 msg: 响应格式不正确

执行结果如下:

图 2. 对 JSONSchema 进行断言

注意,【schema】模式下不会判断字段的值。

通常用于验证响应是否符合接口文档中的示例,无法验证具体业务中的数据正确性

如果对数据值进行断言,请务必同时使用其他模式

4. 断言 jsonpath 匹配

默认的【glob】模式已经可以对部分字段进行准确断言,

但是在多层嵌套、条件筛选等复杂模式下不够简单直观,编写断言时容易失误

在 responses-validator 可以使用【jsonpath】模式,设置多个 jsonpath 表达式,及其预期结果

假设接口返回 JSON 如下

如果要断言 age>18 的名字中只有 sanmu,可以如此编写 yaml 用例

#tests/test_json_jsonpath.yamltest_name: 断言json响应jsonpath

steps: - request: method: get url: https://api.tttt.one/rest-v1/get_user_list

- response: status_code: 200 json: value: # 期望结果,如果存在期望外的字段则失败 $[?(@.age > 18)].name: [sanmu, ] mode: jsonpath # 断言模式 msg: 响应数据不正确

注意,jsonpath 的返回值是列表,所有预期结果也应该是列表,否则会被强制转为列表

所以也可简写为

- response: status_code: 200 json: value: # 期望结果,如果存在期望外的字段则失败 $[?(@.age > 18)].name: sanmu # 会自动转为[sanmu, ] mode: jsonpath # 断言模式 msg: 响应数据不正确

执行结果如下

图 3. 两种 JSONPATH 断言效果相同

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O2KNuf6zusT-s72sU-XyUsig0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券