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:改變默認外觀,添加了一個進度條