本文節選自霍格沃玆測試學院内部教材,文末連結進階學習!
資料驅動就是資料的改變進而驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化的應用。資料量小的測試用例可以使用代碼的參數化來實作資料驅動,資料量大的情況下建議使用一種結構化的檔案(例如 YAML,JSON 等)來對資料進行存儲,然後在測試用例中讀取這些資料。
參數化實作資料驅動
參數化資料驅動原理與之前分享的
接口測試架構實戰(二) | 搞定多環境下的接口測試大同小異。
本文依然使用
@pytest.mark.parametrize
裝飾器來進行參數化,使用參數化來實作資料驅動。
通過參數化的方式,分别判斷 id 為 2,3 的部門的 parentid 為 1:
import pytest
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", [2, 3])
def test_department_list(self, id):
r = self.department.list(id)
assert self.department.jsonpath(expr="$..parentid")[0] == 1
上面的代碼首先使用
@pytest.mark.parametrize
裝飾器,傳遞了兩組資料,測試結果顯示有兩條測試用例被執行,而不是一條測試用例。也就是 pytest 會将兩組測試資料自動生成兩個對應的測試用例并執行,生成兩條測試結果。
YAML 檔案實作資料驅動實戰
當測試資料量大的情況下,可以考慮把資料存儲在結構化的檔案中。從檔案中讀取出代碼中所需要格式的資料,傳遞到測試用例中執行。
本次實戰以 YAML 進行示範。YAML 以使用動态字段進行結構化,它以資料為中心,比 Excel、csv、JSON、XML 等更适合做資料驅動。
将上面參數化的兩組資料存儲到 YAML 檔案中,建立一個
data/department_list.yml
檔案,代碼如下:
- 2
- 3
上面的代碼定義了一個 YAML 格式的資料檔案
department_list.yml
,檔案中定義了一個清單,清單中有兩個資料,最後生成的是這樣的資料格式:[1,2] 。将測試用例中參數化的資料改造成從
department_list.yml
檔案中讀取,代碼如下:
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", \
yaml.safe_load(open("../data/department_list.yml")))
def test_department_list(self, id):
r = self.department.list(id)
assert self.department.jsonpath(expr="$..parentid")[0] == 1
上面的代碼,隻需要使用
yaml.safe_load()
方法,讀取
department_list.yml
檔案中的資料,分别傳入到用例
test_department_list()
方法中完成輸入與結果的驗證。
更多接口測試架構實戰進階内容,我們在後續文章分享。