自动化测试框架pytest---Json Schema
文章目录
- 1. 安装
- 2. 介绍
- 3. 数据类型
- integer / number
- string
- array
- object
JSON Schema⼀个用来定义和校验JSON的web规范,简而言之,JSON Schema是用来校验json是否符合预期。
根据 json 创建 JSON Schema 后,你可以使用你选择的语言中的验证器将示例数据与你的模式进行
验证。
1. 安装
pip install jsonschema==4.23.0
2. 介绍
from jsonschema.validators import validatedef 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 validatedef 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
:使用正则表达式来验证字符串是否符合特定的模式。
正则表达式介绍https://www.runoob.com/regexp/regexp-syntax.html
from jsonschema.validators import validatedef 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 validatedef 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 validatedef 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)