關注公眾號,獲取測試開發實戰乾貨合輯。本文節選自霍格沃茲《測試開發實戰進階》課程教學內容。
資料驅動就是通過資料的改變驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是引數化在自動化測試中的應用。
測試過程中使用資料驅動的優勢主要體現在以下幾點:
- 提高程式碼複用率,相同的測試邏輯只需編寫一條測試用例,就可以被多條測試資料複用,提高了測試程式碼的複用率,同時提高了測試程式碼的編寫效率。
- 異常排查效率高,測試框架依據測試資料,每條資料生成一條測試用例,用例執行過程相互隔離。如果其中一條失敗,不會影響其他的測試用例。
- 程式碼可維護性高,清晰的測試框架利於其他測試工程師閱讀,提高程式碼的可維護性。
測試資料的資料驅動
資料量小的測試用例可以使用程式碼的引數化來實現資料驅動,資料量大的情況下建議大家使用一種結構化的檔案(例如 YAML,JSON 等)來對資料進行儲存,然後在測試用例中讀取這些資料。
引數化實現資料驅動
Pytest 提供了 @pytest.mark.parametrize 裝飾器來進行引數化,可以使用引數化來實現資料驅動。程式碼如下:
import pytest
@pytest.mark.parametrize("key, stock_type, price", [
("alibaba", "BABA", 200),
("JD", "JD", 20)
])
def test_search_data(self, key, stock_type, price):
assert self.main.goto_search_page().\
search(key).get_price(stock_type) > price
上面的程式碼首先使用 @pytest.mark.parametrize 裝飾器,傳遞了兩組資料,測試結果顯示有兩條測試用例被執行,而不是一條測試用例。也就是 Pytest 會將兩組測試資料自動生成兩個對應的測試用例並執行,生成兩條測試結果。
使用 YAML 檔案實現資料驅動
當測試資料量大的情況下,可以考慮把資料儲存在結構化的檔案中。從檔案中讀取出程式碼中所需要格式的資料,傳遞到測試方法中執行。這裡推薦大家使用 YAML 型別的檔案來儲存測試資料。YAML 使用動態欄位進行結構化,它以資料為中心,比 Excel、CSV、JSON、XML 等更適合做資料驅動。
下面,我們將上面引數化的兩組資料儲存到 YAML 檔案中,建立一個 data/searchdata.yml 檔案,程式碼如下:
-
- 'alibaba'
- 'BABA'
- 200
-
- 'JD'
- 'JD'
- 20
上面的程式碼定義了一個 yaml 格式的資料檔案 searchdata.yml ,檔案中定義了一個列表,列表中有兩組資料,最後生成的是這樣的資料格式:[["alibaba", "BABA", 200],["JD", "JD", 20]] 。
下一步將測試用例中引數化的資料改造成從 searchdata.yml 檔案中讀取,程式碼如下:
import pytest
import yaml
@pytest.mark.parametrize("search_key, type, price",\
yaml.safe_load(open("../data/searchdata.yml")))
def test_search(self, search_key, type, price):
assert self.main.goto_search_page().\
search(search_key).get_price(type)>price
上面的程式碼,只需要使用 yaml.safe_load() 方法,就來讀取 searchdata.yml 檔案中的資料,分別傳入到用例 test_search() 方法中完成資料的輸入與結果的驗證。而如果使用 Excel、CSV 檔案格式進行資料的儲存,需要先從 Excel 檔案中讀取資料,再解析成需要的格式。而使用 YAML 則完全省去了這個過程。
以上,關於其他環節的資料驅動,在後續章節分享。
想收看更多內容,可關注公眾號:霍格沃茲測試學院