https://www.jianshu.com/p/e750ff6962b7
http://www.jianshu.com/p/ec40734c872a
jsonschema用来标记和校验json数据,可在自动化测试中验证json的整体结构和字段类型
在线jsonschema 转换:https://jsonschema.net/#/
首先,了解一下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异常
pip install jsonschema
校验的参数为字符串、数字、列表、必填项
from jsonschema import validate schema = { "type": "object", "properties": { "price": {"type": "number"}, "name": {"type": "string"}, "action": {"enum": ["resume", "down"]}, "noname": {"type": "string", 'minLength': 1, 'maxLength': 100}, }, "pro": { 'tag': { 'type': 'array', 'items': { "type": "string" } } }, 'required': ['noname'], #必填项 } validate(instance={"name": "Eggs", "price": 34.99}, schema=schema) # pass,校验数字 # validate(instance={"name": "Eggs", "price": 'd'}, schema=schema) # faild,校验数字 validate(instance = { "tag" :[1,2,3]},schema = schema ) # pass,校验列表 validate(instance={"action": 'resume'}, schema=schema) # pass,校验枚举类型 # validate(instance={"action": 'd'}, schema=schema) # faild,校验 validate(instance={"action": 'resume','noname': 'zhangbiao'}, schema=schema) # pass,校验枚举类型+字段长度 # validate(instance={"action": 'resume'}, schema=schema) # faild,必填项校验
结果是:
Failed validating 'type' in schema['properties']['price']:
{'type': 'number'}
On instance['price']:
'd'
校验的参数为json串
schema = {"type": "object", "properties": { "resumejobid": {"type": "integer", "minimum": 0}, "parameters": { "type": "object", "properties": { "name": {"type": "string"}, "queue": {"type": "string"}, "workspace": {"type": "string"}, }, "required": ["name", "queue", "workspace"] }, }, "required": ["parameters", "resumejobid"] } validate(instance={"parameters": {"name": "", "queue": "", "workspace": ""}, 'resumejobid': 12}, schema=schema) # pass
inputvalues = {'message': 'success', 'data': {'address': '成都', 'eid': 1, 'name': '锤子手机发布会', 'limit': 2000, 'start_time': '2017-11-21T15:25:19', 'status': True}, 'status': 200}
validate(inputvalues,schema=schema)
实际断言时可以将jsonschema存在文件,然后取出来校验。
r = requests.get(url)
schema=json.load(open("list_schema.json"))
validate(instance=r.json(), schema=schema)
Json schema 高级用法
1
2
|
https:
/
/
www.cnblogs.com
/
terencezhou
/
p
/
10474617.html
https:
/
/
json
-
schema.org
/
understanding
-
json
-
schema
/
reference
/
combining.html?highlight
=
oneof
|
如何快速写出Json Schema,校验Json Schema