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

霍格沃茲測試學院發表於2020-07-13
介面測試框架實戰(三)| 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 則完全省去了這個過程。

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

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

 

 

 

相關文章