欢迎光临
我们一直在努力

JSON Schema:接口自动化中高效校验 JSON 数据的方法

文章目录

    • 一、JSON Schema 初识
      • 1.1 安装
      • 1.2 基础介绍
      • 1.3 自动转换工具
      • 1.4 实际校验示例
    • 二、核心校验关键字及用法
      • 2.1 数据类型校验(type)
      • 2.2 数值大小约束(minimum/maximum等)
      • 2.3 字符串特殊校验(pattern)
      • 2.4 数组约束
      • 2.5 对象约束
      • 2.6 必需属性校验(required)
      • 2.7 属性依赖关系(dependentRequired)

在这里插入图片描述

一、JSON Schema 初识

JSON Schema是一个用来定义和校验JSON的web规范,简而言之,JSON Schema是用来校验json是否符合预期。根据json 创建 JSON Schema 后,可使用对应语言的验证器将示例数据与模式进行验证。

1.1 安装

安装命令:

pip install jsonschema

1.2 基础介绍

JSON与JSON Schema对比示例:

JSON示例:

{
"code": "SUCCESS",
"errMsg": "",
"data": false
}

对应的JSON Schema示例:

{
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string"
},
"errMsg": {
"type": "string"
},
"data": {
"type": "boolean"
}
}
}

JSON Schema会从type、required、properties等多个方面对JSON数据进行校验,确保其正确性和一致性。

1.3 自动转换工具

json转JSON Schema可使用工具自动转换:https://tooltt.com/json2schema/

注意:工具结果可能存在错误,需对自动生成的内容进行二次检查。

工具示例: 在这里插入图片描述

1.4 实际校验示例

import requests
from jsonschema.validators import validate

def test_json():
schema = {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string"
},
"errMsg": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [],
"properties": {
"id": {
"type": "number"
},
"title": {
"type": "string"
},
"content": {
"type": "string"
},
"userId": {
"type": "number"
},
"deleteFlag": {
"type": "number"
},
"createTime": {
"type": "string"
},
"updateTime": {
"type": "string"
},
"loginUser": {
"type": "boolean"
}
}
}
}
}
}
url = "http://84.143.19.140:8080/blog/getList"
header = {
"user_token_header":"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJ6aGFuZ3NhbiIsImV4cCI6MTc0MDczOTIzOH0.lYiI6-fPBqIyTVItvUQRyD7OKruSXR6I5tNOEmorWw8"
}
r = requests.get(url=url,headers=header)
validate(r.json(),schema)

通过requests发送请求获取到对应的接口返回,通过validata进行校验返回的json数据和Schema是否符合预期。


二、核心校验关键字及用法

2.1 数据类型校验(type)

type关键字指定JSON数据的类型,可验证每个属性的数据类型是否符合预期,常用类型如下:

type解释
string 字符串类型,用于文本数据。
number 数字类型,用于表示浮点数。
integer 整数类型,用于表示整数。
boolean 布尔类型,值为true或false。
object 对象类型,用于嵌套的JSON对象。
array 数组类型,用于列表或集合。
null 空值类型。

示例:

{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
}
}

properties为验证关键字,其下的每个属性对应待验证JSON数据中的一个键。

2.2 数值大小约束(minimum/maximum等)

  • minimum和maximum:指定数值的最小值和最大值(包含等于)
  • exclusiveMinimum和exclusiveMaximum:指定数值必须严格大于或小于某个值(不包含等于)

示例:

{
"type": "object",
"properties": {
"age": {
"type": "integer",
"minimum": 0,
"maximum": 120
}
}
}

2.3 字符串特殊校验(pattern)

pattern关键字使用正则表达式来验证字符串是否符合特定的模式。

示例:

{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"username": {
"type": "string",
"pattern": "\\\\S+"
}
}
}

2.4 数组约束

  • minItems和maxItems:指定数组的最小和最大长度
  • uniqueItems:确保数组中的元素是唯一的
  • items:定义数组中每个元素的类型和约束

示例:

{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"uniqueItems": true
}
}
}

2.5 对象约束

  • minProperties和maxProperties:指定对象的最小和最大属性数量
  • additionalProperties:控制是否允许对象中存在未在properties中定义的额外属性,默认为True

示例:

{
"type": "object",
"properties": {
"name": { "type": "string" }
},
"minProperties": 1,
"additionalProperties": false
}

2.6 必需属性校验(required)

通过required关键字指定JSON对象中哪些属性是必需的,若JSON实例中缺少这些属性,验证将失败。

示例:

{
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" }
},
"required": ["name", "email"]
}

2.7 属性依赖关系(dependentRequired)

dependentRequired可定义属性之间的依赖关系,例如某个属性存在时,另一个属性必须存在。

示例:

{
"type": "object",
"properties": {
"creditCard": { "type": "string" },
"billingAddress": { "type": "string" }
},
"dependentRequired": {
"creditCard": ["billingAddress"]
}
}

赞(0)
未经允许不得转载:171主机测评 » JSON Schema:接口自动化中高效校验 JSON 数据的方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址