jsonschema用来标记和校验json数据,可在自动化测试中验证json的整体结构和字段类型
首先,了解一下json的数据类型和schema语法
最外层字段
参数 | 描述 |
---|---|
$schema | json schema文件遵守的规范 |
title | json schema文件的标题 |
description | json schema文件的描述信息 |
object
参数 | 描述 |
---|---|
properties | 定义待校验的json对象中,各key-value对中value的限制条件 |
required | 待校验的json对象中,必须存在的key |
string
参数 | 描述 |
---|---|
maxLength | 字符串类型数据的最大长度 |
minLength | 字符串类型数据的最小长度 |
pattern | 使用正则表达式约束字符串类型数据 |
enum | 枚举约束 |
number
参数 | 描述 |
---|---|
minimum | 用于约束取值范围,取值范围大于等于minimum |
maximum | 用于约束取值范围,取值范围小于等于minimum |
exclusiveMinimum | 如果minimum和exclusiveMinimum同时存在,且exclusiveMinimum的值为true,则表示取值范围只能大于minimum |
exclusiveMaximum | 如果maximum和exclusiveMaximum同时存在,且exclusiveMaximum的值为true,则表示取值范围只能小于maximum |
multipleOf | 用于约束取值,表示取值必须能够被multipleOf所指定的值整除 |
array
参数 | 描述 |
---|---|
items | 子元素 |
required | 必须子元素 |
minitems | 最少子元素个数 |
maxitems | 最大子元素个数 |
uniqueItems | 每个元素都不相同,唯一 |
通用
参数 | 描述 |
---|---|
type | 待校验元素的类型,可为:object,string,null,integer,number,array,boolean |
内部引用
- definitions用来定义公共约束
- $ref用来引用definitions中定义的约束
其中,聚合关键字allOf,anyOf,oneOf,not
- allOf 必须满足所有的约束才算通过
- anyOf 必须满足任意一个或多个约束才算通过
- oneOf 必须满足任意一个约束才算通过
-not 不满足约束条件
基本使用
需校验的json数据:
{
"code":200,
"message":"测试通过",
"data":{
"data1":"test",
"data2":["test1","test2"]
}
}
整个json结构可描述为,整体为object类型,包含code,message,data四个属性,其中data为object类型,其中data1为array数组类型,code和message为字符串类型,使用jsonschema描述,如下:
{
"definitions":{
"data":{
"anyof":[
{"type":"string"},
{"pattern":"^test$"}]}
},
"type":"object",
"properties":{
"code":{
"type":"integer"
},
"message":{
"type":"string",
"pattern":"^测试通过$"
},
"data":{
"type":"object",
"required":[
"data1",
"data2"
],
"properties":{
"data1":{"$ref":"#/definitions/data"},
"data2":{
"type":"array",
"items":{"type":"string"},
"minItems":1,
"maxItems":2,
"uniqueItems":True
}
}
}
}
}
- validate校验成功时,不会有报错
- json数据校验失败时,抛出jsonschema.exceptions.ValidationError异常
- schema模式本身有问题时,抛出jsonschema.exceptions.SchemaError异常
参考文档:
自动化接口响应断言神器---Json Schema
使用JSONSchema断言
python接口自动化34-json校验神器jsonschema
网友评论