大數據

接口測試框架實戰(五) | 測試數據的數據驅動

本文節選自霍格沃玆測試學院內部教材,文末鏈接進階學習!

數據驅動就是數據的改變從而驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化的應用。數據量小的測試用例可以使用代碼的參數化來實現數據驅動,數據量大的情況下建議使用一種結構化的文件(例如 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() 方法中完成輸入與結果的驗證。

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *