接口測試框架實戰(三)| JSON 請求與響應斷言

接口測試框架實戰(三)| JSON 請求與響應斷言

 

關注公眾號,獲取測試開發實戰乾貨合輯。本文節選自霍格沃茲《測試開發實戰進階》課程教學內容。

數據驅動就是通過數據的改變驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化在自動化測試中的應用。

測試過程中使用數據驅動的優勢主要體現在以下幾點:

  1. 提高代碼復用率,相同的測試邏輯只需編寫一條測試用例,就可以被多條測試數據復用,提高了測試代碼的復用率,同時提高了測試代碼的編寫效率。
  2. 異常排查效率高,測試框架依據測試數據,每條數據生成一條測試用例,用例執行過程相互隔離。如果其中一條失敗,不會影響其他的測試用例。
  3. 代碼可維護性高,清晰的測試框架利於其他測試工程師閱讀,提高代碼的可維護性。

測試數據的數據驅動

數據量小的測試用例可以使用代碼的參數化來實現數據驅動,數據量大的情況下建議大家使用一種結構化的文件(例如 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 則完全省去了這個過程。

以上,關於其他環節的數據驅動,在後續章節分享。

想收看更多內容,可關注公眾號:霍格沃茲測試學院