[跟著官方文檔學pytest][二][學習筆記]
1.如何調用pytest
通常,使用命令pytest調用pytest(有關調用 pytest 的其他方法,請參見下文)。這將在當前目錄及其子目錄中名稱遵循test_*.py或\*_test.py形式的所有文件中執行所有測試。更一般地說,pytest遵循標準的測試發現規則。
1.1.指定要運行的測試
Pytest支持多種從命令行運行和選擇測試的方法。
在module運行測試
pytest test_mod.py
在目錄運行測試
pytest testing/
通過關鍵字表達式運行測試
這將運行包含與給定字符串表達式匹配的名稱(不區分大小寫)的測試,其中可以包括使用文件名、類名和函數名作為變量的 Python運算符。上面的示例將運行TestMyClass.test_something但不是TestMyClass.test_method_simple。
pytest -k "MyClass and not method"
通過node ids運行測試
每個收集到的測試都分配有一個唯一的nodeid,它由模塊文件名和后面的說明符組成,如類名、函數名和來自參數化的參數,用 :: 字符分隔。
運行module中指定的測試
pytest test_mod.py::test_func
另一個運行指定測試的例子
pytest test_mod.py::TestClass::test_method
通過marker expressions運行測試
pytest -m slow
將運行所有使用 @pytest.mark.slow 裝飾器裝飾的測試。
從包運行測試
pytest --pyargs pkg.testing
這將導入pkg.testing并使用其文件系統位置來查找和運行測試。
1.2.獲取版本、選項、名字、環境變量幫助
pytest --version #獲取版本 pytest --fixtures #顯示可用的內置功能參數 pytest -h | --help #獲取幫助
1.3.分析測試執行持續時間
要獲得超過1.0秒的最慢10個測試持續時間的列表:
pytest --durations=10 --durations-min=1.0
默認情況下,除非在命令行上添加了-vv,否則pytest不會顯示太小(<0.005s)的測試持續時間。
1.4.管理插件的加載
1.4.1.早期加載插件
可以使用-p選項在命令行中顯式地提前加載插件(內部和外部):
pytest -p mypluginmodule
該選項接收一個名稱參數,可以是:
完整的模塊名稱,例如myproject.plugins。 這個帶點的名稱必須是可導入的。
插件的入口點名稱。這是注冊插件時傳遞給setuptools的名稱。例如,要提前加載pytest-cov插件,您可以使用:
pytest -p pytest_cov
1.4.2.禁用插件
要在調用時禁用加載特定插件,請使用-p選項和前綴no:
示例:要禁用加載插件doctest,該插件負責從文本文件執行doctest測試,請像這樣調用pytest:
pytest -p no:doctest
1.5.其他方法調用pytest
1.5.1.通過python -m pytest
可以從命令行通過Python解釋器調用測試:
python -m pytest [...]
這幾乎等同于直接調用命令行腳本pytest […],只是通過python調用還會將當前目錄添加到sys.path中。
1.5.2.通過Python代碼
可以直接通過Python代碼調用pytest
retcode = pytest.main()
這就像從命令行調用“pytest”一樣。它不會引發SystemExit而是返回退出代碼。可以傳入選項和參數:
retcode = pytest.main(["-x","mytestdir"])
可以為pytest.main指定其他插件:
# content of myinvoke.py import pytest import sys class MyPlugin: def pytest_sessionfinish(self): print("*** test run reporting finishing") if __name__ == "__main__": sys.exit(pytest.main(["-qq"], plugins=[MyPlugin()]))
運行它將顯示MyPlugin已添加并且它的鉤子已被調用:
python .\myinvoke.py *** test run reporting finishing
注意:調用pytest.main()將導致導入的測試以及它們導入的任何模塊。由于python導入系統的緩存機制,從同一進程對pytest.main()的后續調用將不會反映調用之間對這些文件的更改。因此,不建議從同一進程多次調用pytest.main()(例如,為了重新運行測試)。
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。