天天看點

接口測試架構實戰(五) | 測試資料的資料驅動

本文節選自霍格沃玆測試學院内部教材,文末連結進階學習!

資料驅動就是資料的改變進而驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化的應用。資料量小的測試用例可以使用代碼的參數化來實作資料驅動,資料量大的情況下建議使用一種結構化的檔案(例如 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()

方法中完成輸入與結果的驗證。

更多接口測試架構實戰進階内容,我們在後續文章分享。

更多技術文章分享及測試資料