Jsonschema測試實踐

簡介

Json Schema就是用來定義json數據約束的一個標準。根據這個約定模式,交換數據的雙方可以理解json數據的要求和約束,也可以據此對數據進行驗證,保證數據交換的正確性(通俗來講:描述或者驗證數據格式)。

Jsonschema的特性和用途:

  1. 用於描述數據結構

描述json數據時,如果數據本身的複雜度很高,高到三維四維,普通的標籤函數已經無法表示這種層級結構,而Jsonschema利用object和array字段類型的反覆嵌套,可以規避掉這個缺陷。

  1. 用於構建人機可讀的文檔

Jsonschema是自描述的,它本身就是一份很完善的說明文檔,字段的說明、格式的要求等清晰明瞭。

  1. 用於校驗數據

通過描述接口入參和出參,進行數據校驗,保證兩方數據一致。

項目應用

例如:在自動化測試中,校驗接口的出參就用到jsonschema,用來校驗得到的json字符串的數據類型是否與預期一致,如下爲一個jsonschema實例:

schema = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "description": "some information about this",
    "type": "object",
    "required": [
        "sdkcorev",  "price"
    ],
    "properties": {
        "sdkcorev": {
            "type": "string",
            "minLength": 3,
            "maxLength": 30
        },
        "price": {
            "type": "number",
            "multipleOf": 0.5, #能夠被0.5整除
            # 這裏沒有取等,5.0<price<99999.0
            "minimum": 5.0,
            "maximum": 99999.0,
            # 若使用下面這兩個關鍵字則 5.0<=price<=99999.0
            # "exclusiveMinimum": 5.0,
            # "exclusiveMaximum": 99999.0
        },
        "tags": {
            "type": "array",
            "items": [
                {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 8
                },
            ],
            "additonalItems": {
                "type": "string",
                "miniLength": 2
            },
            "miniItems": 1,
            "maxItems": 5,
            "uniqueItems": True
        },
        "coding": {
            "type": "string",
            "pattern": "^[A-Z]+[a-zA-Z0-9]{12}$"
        },
        "other": {
            "type": "object",
            "properties": {
                "info1": {
                    "type": "string"
                },
            }
        }
    },
    "minProperties": 3, #最小屬性個數
    "maxProperties": 7, #最大屬性個數
}

此實例便對接口返回的json字段進行了詳細校驗

1. 結構語法:

字段最好不要有’_’下劃線分隔

$schema:說明是用了哪一個草案進行校驗(可省略)

description:描述信息(可省略)

type:需要校驗的對象是一個什麼類型,主要有:Object、array、string、integer、number、boolean、enum、null

Object類型主要關鍵字有:

  1. properties:定義object的各個字段的屬性;
  2. required:限定必需字段。
  3. additionalProperties:properties不能是其他字段爲False,否則爲True

array類型主要關鍵字有:

1. items:每個元素的類型;

2. minItems:最小個數;

3. uniqueitems:每一個元素都不一樣(True,False)。

string類型主要關鍵字有:

1. maxLength定義字符串的最大長度;

2. minLength定義字符串的最小長度;

3. pattern用正則表達式約束字符串。

number類型主要關鍵字有:

1. minimum(maximum) 最小(大)值;

2. exclusiveMin(ax)imum 如果其值對應爲true,則實例大(小)於 min(ax)imum 的值才生效。

integer類型與number類型限制類似,可以描述任意長度,任意小數點的數字。

2. 使用技巧:

若接口中參數較多,並且每一個都需要驗證時,需要把每一個的校驗都要寫上, required後將每一個必須的字段都加上;但是若需要校驗的json字段在此schema中只佔了部分的話,那麼完全可以複用一套schema,只是在此json中不存在的字段在schema中的required後面不用加,如此減少了再次書寫schema的工作量。

 

總結

Jsonschema主要用於對數據的約束以及校驗,描述已知的數據格式,確保用戶提交的數據質量,減少部分手工校驗。

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