JSON Scheme簡介
對于JSON格式的請求數(shù)據或者響應數(shù)據,在不同的數(shù)據和場景下往往會有一部分動態(tài)的值及字段。此時我們可以使用JSON Scheme Validator(JSON結構驗證)來驗證JSON的結構,各參數(shù)及嵌套參數(shù)的類型,以及必要字段。
如:GET http://httpbin.org/get?a=a的響應數(shù)據:
{
"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, 必要字段(必須出現(xiàn)的字段)假設為所有
- 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中填寫必須要出現(xiàn)的元素,required中為注明的元素可以不出現(xiàn),但出現(xiàn)則必須是限定的類型。
array類型的驗證格式一般為:
{
"type": "array",
"items": {...}
"required": [....]
}
其中type類型為array, items下寫各個子項, required中填寫必須要出現(xiàn)的元素。
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結構模板,然后使用tv4.validate(jsonData, schema)進行驗證即可,如下圖:

Postman tv4驗證JSON 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;
});
運行可看到,斷言通過:

斷言通過