pytest常用的方法和原理
1.pytest的原理
- pytest外掛基於pluggy模組;pluggy有三個重要概念:HookspecMarker(用來定義hook函式),HookimplMarker(用來實現鉤子函式完成外掛的邏輯)和PluginManager(用來負責註冊和呼叫外掛的管理器);
2.pytest的規定
- 所有規範和實現均遵循pytest_字首命名約定,從而易於區分和查詢
3.載入外掛的方式
- 內建外掛:從程式碼內部的_pytest目錄載入
- 外部外掛(第三方外掛):通過setuptools entry points機制發現的第三方外掛模組
- conftest.py形式的本地外掛:測試目錄下的自動模組發現機制
4.pytest外掛的順序
1.通過掃描命令列中的選項並阻止該外掛被載入(即使內建外掛也可以通過這種方式被阻止)。這是在正常的命令列解析之前發生的。-p no:name
2.載入所有的內建外掛
3.通過預掃描命令列中,-p name選項,在實際解析命令列之前載入指定的外掛
4.載入所有通過setuptools入口點註冊的外掛(可設定環境變數PYTEST_DISABLE_PLUGIN_AUTOLOAD進行禁用,僅載入明確指定的外掛)
5.載入通過環境變數PYTEST_PLUGINS指定的所有外掛
6.載入通過命令列推斷出的所有confest.py檔案:
-如果未指定測試路徑,則使用當前dir作為測試路徑
-如果存在指定測試路徑,那麼載入conftest.py和test */conftest.py,相對於第一個測試路徑
注意,pytest是找不到藏在更深的子目錄裡的confest.py檔案的,最好將confest.py儲存在頂級的測試或者專案的根目錄
7.通過在confest.py檔案中的pytest_plugin指定的變數,遞迴載入所有的外掛
5.安裝路徑
- pytest第三方外掛庫網站 https://docs.pytest.org/en/latest/plugins.html
- PyPI下載 https://pypi.python.org(可以使用pytest、pytest-、-pytest作為搜尋關鍵字來搜尋外掛)
6.常用的外掛簡單描述
- pytest-rerunfailures:失敗用例重跑
- pytest-html:生成xml/html格式的測試報告,儲存於使用者指定路徑
- pytest-repeat:重複執行多次用例
- pytest-assume:進行多次斷言
- pytest-xdist:測試用例可以分散式執行,從而節省自動化測試時間
- pytest-cov:覆蓋率報告,顯示哪些程式碼行已經測試過,哪些還沒有
- pytest-instafail:在測試執行期間報告失敗
- pytest-timeout:根據函式標記或全域性定義進行超時測試
- pytest-ordering:設定執行順序。對於一些上下文依賴的,有時候可能需要設定一些特定執行順序
- pytest-cache:重跑上次失敗的用例
- pytest-autochecklog:自動生成測試日誌
- pytest-sugar:改變預設外觀,添加了一個進度條