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

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