接口測試框架實戰(三)| JSON 請求與響應斷言
關注公眾號,獲取測試開發實戰乾貨合輯。本文節選自霍格沃茲《測試開發實戰進階》課程教學內容。
數據驅動就是通過數據的改變驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化在自動化測試中的應用。
測試過程中使用數據驅動的優勢主要體現在以下幾點:
- 提高代碼復用率,相同的測試邏輯只需編寫一條測試用例,就可以被多條測試數據復用,提高了測試代碼的復用率,同時提高了測試代碼的編寫效率。
- 異常排查效率高,測試框架依據測試數據,每條數據生成一條測試用例,用例執行過程相互隔離。如果其中一條失敗,不會影響其他的測試用例。
- 代碼可維護性高,清晰的測試框架利於其他測試工程師閱讀,提高代碼的可維護性。
測試數據的數據驅動
數據量小的測試用例可以使用代碼的參數化來實現數據驅動,數據量大的情況下建議大家使用一種結構化的文件(例如 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 則完全省去了這個過程。
以上,關於其他環節的數據驅動,在後續章節分享。
想收看更多內容,可關注公眾號:霍格沃茲測試學院