自动化测试框架pytest---Json Schema
·
JSON Schema⼀个用来定义和校验JSON的web规范,简而言之,JSON Schema是用来校验json是否符合预期。
根据 json 创建 JSON Schema 后,你可以使用你选择的语言中的验证器将示例数据与你的模式进行
验证。
1. 安装
pip install jsonschema==4.23.0
2. 介绍
from jsonschema.validators import validate
def test_01():
json = {
"code": 1,
"emg": "123123",
"data": {
"id": 1,
"name": "zhangsan",
"isAdmin": False
}
}
json_schema = {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "number"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"isAdmin": {
"type": "boolean"
}
}
}
}
}
validate(instance=json, schema=json_schema) # 验证json是否符合schema
json转json schema自动工具, https://tooltt.com/json2schema/, 可能会有错误, 要自己检查
3. 数据类型

integer / number
type类型为integer / number 时, 可以对数值的范围进行限定, 关键字:
minimum和maximum:指定数值的最小值和最大值。exclusiveMinimum和exclusiveMaximum:指定数值必须严格大于或小于某个值(不包
含等于)。
from jsonschema.validators import validate
def test_01():
json = {
"code": 1,
"emg": "123123",
"data": {
"id": 1,
"name": "zhangsan",
"isAdmin": False
}
}
json_schema = {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "number"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "number",
"minimum": 2, # 最小值设置为2, 传参为1, 报错
"maximum": 100
},
"name": {
"type": "string"
},
"isAdmin": {
"type": "boolean"
}
}
}
}
}
validate(instance=json, schema=json_schema)

string
type类型为string时, 可以对字符串的模式进行限定, 关键字:
pattern:使用正则表达式来验证字符串是否符合特定的模式。
from jsonschema.validators import validate
def test_01():
json = {
"code": 1,
"emg": "123123",
"data": {
"id": 1,
"name": "zhangsan",
"isAdmin": False
}
}
json_schema = {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "number"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "number",
},
"name": {
"type": "string",
"pattern": r"\S+" # r表示这是一个原始字符, 不要处理成转义字符
},
"isAdmin": {
"type": "boolean"
}
}
}
}
}
validate(instance=json, schema=json_schema)

array
type类型为array时, 可以对数组中的数据进行约束, 关键字:
minItems和maxItems:指定数组的最小和最大长度。uniqueItems:True表示数组中的元素是唯一的, False表示数组中的元素不用是唯一的items:定义数组中每个元素的类型和约束。
from jsonschema.validators import validate
def test_01():
json = {
"code": 1,
"emg": "123123",
"data": {
"id": 1,
"name": "zhangsan",
"isAdmin": False
},
"aaa": [1, 2, 2]
}
json_schema = {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "number"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "number",
},
"name": {
"type": "string",
},
"isAdmin": {
"type": "boolean"
}
}
},
"aaa":{
"type": "array",
"items": { # 数组中的数据的类型
"type": "integer"
},
"minItems": 1,# 数组最小的长度
"uniqueItems": True # 数组中的数据要求唯一, 此时数组数据不唯一, 报错
}
}
}
validate(instance=json, schema=json_schema)

object
type类型为object时, 可以对对象进行约束, 关键字:
properties: 约束对象中的属性minProperties和maxProperties:指定对象的最小和最大属性数量。additionalProperties:控制是否允许对象中存在未在 properties 中定义的额外属性,默
认为True, 表示允许。required: JSON Schema 可以指定哪些属性是必需的。如果 JSON 实例中缺少这些必需属性,验证将失败dependentRequired: 可以定义属性之间的依赖关系。例如,如果某个属性存在(前),则必须存在另一个属性(后)。
from jsonschema.validators import validate
def test_01():
json = {
"code": 1,
"emg": "123123",
"data": {
"id": 1,
"name": "zhangsan",
"isAdmin": False
},
"aaa": [1, 2, 2]
}
json_schema = {
"type": "object",
"minProperties": 1, # 属性个数最少为1
"additionalProperties": False, # 不允许出现properties定义中的额外属性, 此时出现了"aaa", 报错
"required": ["code", "emg"],# 必须包含"code", "emg"
"dependentRequired": {
"data": ["code"] # data出现, 必须code也要出现
},
"properties": {
"code": {
"type": "number"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "number",
},
"name": {
"type": "string",
},
"isAdmin": {
"type": "boolean"
}
}
}
}
}
validate(instance=json, schema=json_schema)

更多推荐

所有评论(0)