1. 程式人生 > 實用技巧 >介面測試框架實戰(四)| 搞定 Schema 斷言

介面測試框架實戰(四)| 搞定 Schema 斷言

本文節選自霍格沃茲《測試開發實戰進階》課程教學內容。

JSON Schema 簡介與安裝

JSON Schema 是描述 JSON 資料結構的一種格式,JSON Schema 模式是一個詞彙表。通過 JSON Schema 可以註釋 JSON 的欄位以及欄位資料型別等資訊。

在實際工作中,對介面返回值進行斷言校驗,除了常用欄位的斷言檢測以外,還要對其他欄位的型別進行檢測。對返回的欄位一個個寫斷言顯然是非常耗時的,這個時候就需要一個模板,可以定義好資料型別和匹配條件,除了關鍵引數外,其餘可直接通過此模板來斷言,Json Schema 可以完美實現這樣的需求。通過校驗 JSON Schema 就可以判斷 Response 是否符合約定。

一個 JSON 格式的資料,通常是由以下一種或多種資料型別組成的:

  1. string
  2. Numeric(integer、number)
  3. object
  4. array
  5. boolean
  6. null

JSON Schema 中對上面的 6 種資料型別,都有相應的屬性對其進行描述。

Json Schema 官網:http://json-schema.org/implementations.html

環境準備

安裝 JSON Schema 包:

pipinstalljsonschema

JSON Schema 的使用

JsonSchema 模板生成

1. 首先要藉助於 Json Schema Tool 的網站:

https://www.jsonschema.net/

將返回 JSON 字串複製到頁面左邊,然後點選 INFER SHCEMA,就會自動轉換為 Schema JSON 檔案型別,會將每個地段的返回值型別都設定一個預設型別;在 pattern 中也可以寫正則進行匹配:

2. 點選“設定”按鈕會出現各個型別返回值更詳細的斷言設定,這個就是 Schema 最常用也是最實用的功能,也可以對每種型別的欄位最更細化的區間值校驗或者斷言,例如長度,取值範圍等。

3. 點選複製按鈕,可以將生成的 Schema 模板儲存下來。

JSON Schema 校驗案例

下面有個 JSON Schem 例子,它只有兩個重要欄位 name 和 price。這個 schema 規定 name 必須是 string 型別,price 必須是 number 型別。使用 JSON Schema 進行校驗,使用 validate 方法,輸入一個 name 為 Eggs 和 price 為 34.99 的資料進行校驗:

deftest_schema(self):
schema={
"type":"object",
"properties":{
"price":{"type":"number"},
"name":{"type":"string"},
},
}
validate(instance={"name":"Eggs","price":34.99},schema=schema)

如果將 number 寫成 string,則會出現報錯:

>>>fromjsonschemaimportvalidate
>>>schema={
..."type":"object",
..."properties":{
..."price":{"type":"string"},
..."name":{"type":"string"},
...},
...}
>>>validate(instance={"name":"Eggs","price":34.99},schema=schema)

返回報錯資訊:

Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
File"/Users/lixu/Library/Python/3.7/lib/python/site-packages/jsonschema/validators.py",\
line934,invalidate
raiseerror
jsonschema.exceptions.ValidationError:34.99isnotoftype'string'

以上,JSON Schema 作為介面測試的資料校驗利器讓工作變得更加高效,也更好的實現了介面監控,能知道哪裡出了問題並及時糾正。更多內容,在後續章節探討。

想關注更多內容,可關注公眾號:霍格沃茲測試學院