pytest的fixture更優雅的初始化自動化測試數據


pytest的fixture更優雅的初始化自動化測試數據

什麼是fixture

fixture是測試函數運行前後,由pytest執行的外殼函數,它的作用是將一些非核心測試邏輯從測試函數分離出來,以便於其他測試函數使用,同時保持這些邊緣邏輯的一致性。

fixture中的代碼可以定製,滿足多變對的測試需求,包括定義傳入測試中的數據集、配置測試前系統的初始狀態、為批量測試提供數據源等。

pytest的fixture更優雅的初始化自動化測試數據

pytest.fixture()裝飾器用於聲明函數是一個fixture,如果測試函數的參數列表包含fixture的名字,那麼pytest會檢測到,並在測試函數運行之前執行該fixture,fixture會將數據返回給測試函數。

pytest的fixture更優雅的初始化自動化測試數據

fixture執行和銷燬的邏輯

一般來說fixture會在測試函數執行前運行,但是如果fixture函數中包含了yield關鍵字,那麼pytest會在知道yield處停止,轉而運行測試函數,等測試函數執行完畢後再回到fixture,繼續執行yield後面的代碼。是不是似曾相識,每個測試用例都會有的setup和teardown。

pytest的fixture更優雅的初始化自動化測試數據

<code>pytest --setup-show test_add.py/<code>

--setup-show 會在控制檯輸出測試過程中執行的是什麼以及執行的先後順序,執行上面命令查看輸出內容

pytest的fixture更優雅的初始化自動化測試數據

從截圖中可以看到,測試函數被夾在中間,pytest將每一個fixture的執行分成SETUP和TEARDOWN兩部分,測試函數執行前有多個setup,是因為自定義的fixture中用到了內置的一些fixture,關於內置fixture後面再寫文章界介紹。

fixture前面的F和S代表的是fixture的作用範圍,F代表的函數級別的作用範圍,S代表的是會話級別的作為範圍。

使用fixture傳數據

fixture非常適合存放測試數據,並且它也可以返回任何類型的數據。

pytest的fixture更優雅的初始化自動化測試數據

通過構造一個fixture並使其返回一個元祖,在測試函數中傳入fixture,並是斷言失敗,下圖是輸出結果

pytest的fixture更優雅的初始化自動化測試數據

pytest給出了清晰的堆棧內容,還給出了引起assert異常的函數參數值,那麼如果fixture中發生了異常,是否會被堆棧跟蹤,輸出的信息是否有區別呢?

pytest的fixture更優雅的初始化自動化測試數據

在fixture中加一個註定失敗的斷言,運行測試用例,pytest正確定位了fixture中發生的異常,而且並沒有報告為FAIL,而是ERROR,這個區分很清晰,如果是測試結果被標記為了FAIL,那麼用戶就知道是失敗發生在測試用例中ongoing,而不是依賴的fixture中。


後面會繼續輸出關於fixture中的更多內容,包括使用多個fixture、fixture的作用範圍等,關注小編,第一時間獲取


分享到:


相關文章: