python接口自動化中不可或缺的強大斷言器-JSON Schema

目的:
   我們經常發現,被測接口的返回值含有大量key-value節點,且往往有很多value是不固定的,有的類型不固定、有的是值不固定,這樣給接口自動化的斷言帶來巨大困擾,而本次介紹的jsonschema可以衝在斷言最前方,將其當作第一道大網過濾掉大多數問題;只需幾行簡單聲明,助你輕鬆實現接口自動化
 

js和python類型參照表:

js python
string string
number int/float
object dict
array list
boolean bool
null none

一. type節點

string
number
object
array
boolean
null

其中2個類型在書寫時要注意,不能帶雙引號:

  • 1.null
{ "type": "null" }

正確匹配舉例

{
"address":null
}
  • 2.boolean
{ "type": "boolean" }

正確匹配舉例

{
"isMan":true,
"isStudent":false
}

二. properties節點——描述可能含有的key,可多不可少

"properties": {
    "name": {"type": "string"},
    "age": {"type": "number"},

三. propertyNames節點——強調的是匹配key的名字,用正則來匹配

get_propertyNames_demo = {
	"type": "object",
	"propertyNames": {
		"pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
	}
}

正確匹配舉例

{
  "_a_proper_token_001": "value"
}

錯誤匹配舉例

{
  "001 invalid": "value"
}

四. dependencies節點——強調依賴關係,舉例b依賴於a

  • 0.允許沒a也沒b
  • 1.必須有a纔能有b
  • 2.沒有a但出現b是錯的
  • 3.允許有a沒有b:
get_dependencies_demo = {
	"type": "object",
	"dependencies": {
		"b": ["a"],
	}
}

“”"舉例說明
0:沒a也沒b

{
  "user": "wenjie",
}

1:必須有a纔能有b

{
  "user": "wenjie",
  "b": 100,
  "a": "10100"
}

2:沒有a但出現b是錯的

{
  "user": "wenjie",
  "b": 100
}

3:允許有a沒有b

{
  "user": "wenjie",
  "a": "10000"
}

“”"

疑問:如果必須2個都存在呢?下面是a、b相互綁定的寫法
get_dependencies_must_demo = {
	"type": "object",
	"properties": {
		"name": {"type": "string"},
		"a": {"type": "number"},
		"b": {"type": "string"}
	},
	"dependencies": {
		"b": ["a"],
		"a": ["b"]
	}
}

五. required節點——描述必備的key

get_required_demo = {
	"type": "object",
	"properties": {
		"age": {"type": "number"},
		"height": {"type": "number"},
		"street_name": {"type": "string"},
		"street_type": {"type": "string",
						"enum": ["Street", "Avenue", "Boulevard"]
						}
	},
	"required": ["age", "height"]  # 必須存在age、height節點,其他無所謂
}

六. enum節點作用解析:

"street_type": {"type": "string",
 						"enum": ["Street", "Avenue", "Boulevard"]
 						}

“”“enum 描述了只允許有3種可能[“Street”, “Avenue”, “Boulevard”],如果數據不匹配就是錯誤的”""

七. 其他限制類型參考

  • 1.寬鬆類型:數字
{"type": "number"}

number
1
-1
1.01
2.99792458e8

  • 2.嚴格類型:整數
{"type": "integer"}

integer:
-1、10

  • 3.附加驗證:倍數
{
	"type": "number",
	"multipleOf": 10
}

multipleOf:5
0
10

  • 4.附加驗證:大於、小於

匹配目標:包含0和100的

{
	"type": "number",
	"minimum": 0,
	"maximum": 100
}

0~100

匹配目標:不包含0和100的

{
	"type": "number",
	"exclusiveMinimum": 0,
	"exclusiveMaximum": 100
}

1~99

也可以組合起來:

{
	"type": "number",
	"minimum": 0,
	"exclusiveMaximum": 100
}

0~99

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章