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