likes
comments
collection
share

全量字段校验

作者站长头像
站长
· 阅读数 20

一、 全量字段校验

  1. 概念

    校验接⼝返回响应结果的全部字段
  2. 应用场景

     普通断言,无法判断的 字段,通过全量字段校验弥补
  3. 校验内容

     * 字段值
     * 字段名 或 字段值的类型
  4. 校验流程

     1.定义 校验规则(json语法)
     2.⽐对 响应数据 是否 符合 校验规则
  5. 安装jsonschema

      pip install jsonschema
    

二、 校验方式

2.1 工具校验

https://www.jsonschemavalidator.net

校验规则全量字段校验

待校验数据全量字段校验

校验结果全量字段校验

2.2 代码校验

#1.导包
 import jsonschema
#2.待校验数据
data ={
  "success": true,
  "code": 10000,
  "message": "操作成功"
}
#3.校验规则
schema = {
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "code": {
      "type": "integer"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "success",
    "code",
    "message"
  ]
}

#4.校验数据
print(jsonschema.validate(instance=data, schema=schema))

查验校验结果

  • 校验通过:返回 None
  • 校验失败

    • schema 规则错误,返回 SchemaError
    • json 数据错误,返回 ValidationError

三、jsonschema语法

关键字一:type作用:约束数据类型语法:{"type": "数据类型"}

"""
integer —— 整数
string —— 字符串
object —— 对象
array —— 数组          - 对应 python 列表
number —— 整数/⼩数
null —— 空值            - 对应 python None
boolean —— 布尔值        - 对应 true / false
"""

关键字二:properties说明:是 type关键字的辅助。用于 type 的值为 object 的场景。作用:指定 对象中 每个字段的校验规则。 可以嵌套使用。

语法:
{
    "type": "object",
    "properties": {
        "字段名1":{规则}, 
        "字段名2":{规则},
        ......
    } 
}

案例

# 准备数据
data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": None,
    "data": {
        "name": "tom",
        "age": 18
    },
    "luckyNumber": [6, 8, 9]
}

全量字段校验

关键字三:required作用:校验对象中必须存在的字段。字段名必须是字符串,且唯⼀

语法: 
{
    "required": ["字段名1", "字段名2", ...] 
}

关键字四:const作用:校验字段值是⼀个固定值。等价于 断言中 == 用法

语法: 
{
    "字段名":{"const": 具体值}
}

关键字五:pattern作用:指定正则表达式,对字符串进行模糊匹配

    正则表达式,用不常用的符号,排列组合,从大量 字符串 数据中,
    按指定条件 筛选 数据

"""
基础正则举例:
1 包含字符串:hello  类似于 断言中的 in
2 以字符串开头 ^: ^hello     如:hello,world
3 以字符串结尾 $: hello$     如:hello中国,
4 匹配[]内任意1个字符[]: [0-9]匹配任意⼀个数字  
[a-z]匹任意一个小写字母  [cjfew9823]匹配任意一个
5 匹配指定次数{}: [0-9]{6}匹配6位数字。
"""

案例

# 导包
import jsonschema

# 校验数据
data = {
    "success": False,
    "code": 10000,
    "message": "xxx登录成功",
    "data": {
        "age": 20,
        "name": "lily"
    }
}

# 校验规则
schema = {
    "type": "object",
    "properties": {
        "success": {
            "type": "boolean",
        },
        "code": {
            "type": "integer"
        },
        "message": {
            "pattern": "登录成功$"
        },
        "data": {
            "type": "object",
            "properties": {
                "age": {
                    "const": 20
                },
                "name": {
                    "const": "lily"
                }
            },
            "required": ["age", "name"]
        }
    },
    "required": ["success", "code", "message", "data"]
}

# 校验
print(jsonschema.validate(instance=data, schema=schema))