JSON Scheme簡介
對於JSON格式的請求數據或者響應數據,在不同的數據和場景下往往會有一部分動態的值及字段。此時我們可以使用JSON Scheme Validator(JSON結構驗證)來驗證JSON的結構,各參數及嵌套參數的類型,以及必要字段。
如:GET http://httpbin.org/get?a=a
的響應數據:
{
"args": {
"a": "a"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Cache-Control": "no-cache",
"Host": "httpbin.org",
"Postman-Token": "08abebe1-eaa4-46a2-9b3a-0f2a5580c44f",
"User-Agent": "PostmanRuntime/7.15.0"
},
"origin": "164.52.33.194, 164.52.33.194",
"url": "https://httpbin.org/get?a=a"
}
我們可以驗證其結構為:
- 整體是一個(類型為)object對象,包含屬性args, headers,origin,url, 必要字段(必須出現的字段)假設為所有
- args類型為object, 包含屬性a, a類型為string
- headers類型為object, 包含屬性Accept, Accept-Encoding, Cache-Control, Host, Postman-Token, User-Agent, 這些類型都為string
- origin類型為string
- url類型為string
轉為JSON Schema語法如下:
{
"type": "object",
"properties": {
"args": {"type": "object","properties": {"a": {"type": "string"}} },
"hearders": {
"type": "object",
"properties": {
"Accept": {"type": "string"},
"Cache-Control": {"type": "string"},
"Host": {"type": "string"},
"Postman-Token": {"type": "string"},
"User-Agent": {"type": "string"},
},
},
"origin": {"type": "string"},
"url": {"type": "string"},
},
"required": ["args", "headers", "origin", "url"]
}
object類型的驗證格式一般為:
{
"type": "object",
"properties": {...}
"required": [....]
}
其中type類型指定為object, properties下寫各個子屬性,required中填寫必須要出現的元素,required中為注明的元素可以不出現,但出現則必須是限定的類型
array類型的驗證格式一般為:
{
"type": "array",
"items": {...}
"required": [....]
}
其中type類型為array, items下寫各個子項, required中填寫必須要出現的元素。
string類型的驗證格式:
{"type": "string"}
integer類型的驗證格式:
{"type": "integer"}
JSON Scheme還支持引用等很多賦值的語法,詳細可以參考:http://json-schema.org/
Postman tv4使用
tv4即 Tiny Validator for JSON data的縮寫,微型JSON結構驗證器。
在Postman中的使用方法也很簡單,首先在Tests腳本中根據響應編寫JSON Schema結構模板,然后使用tv3.validate(jsonData, schema)進行驗證即可,如下圖:
Tests代碼如下:
var schema = {
"type": "object",
"properties": {
"args": {"type": "object", "properties": {"a": {"type": "string"}}},
"hearders": {
"type": "object",
"properties": {
"Accept": {"type": "string"},
"Cache-Control": {"type": "string"},
"Host": {"type": "string"},
"Postman-Token": {"type": "string"},
"User-Agent": {"type": "string"},
},
},
"origin": {"type": "string"},
"url": {"type": "string"},
},
"required": ["args", "headers", "origin", "url"]
}
pm.test('Schema is valid', function() {
var jsonData = pm.response.json();
pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});
運行可看到,斷言通過: