1. 第一個(或N個)測試失敗后停止
在第一個(N)次失敗后停止測試過程:
pytest -x # 遇到第一個失敗時,停止 pytest --maxfail==2 # 遇到第二個失敗時,停止
2.指定測試或選擇測試
Pytest支持從命令行運行和選擇測試的幾種方法。
- 在模塊中運行測試
pytest test_mod.py
- 在目錄中運行測試
pytest testing/
目錄級運行,即指定運行某一目錄下所有測試集(以test_ 開頭或者_test結尾的方法或者文件)方式
- 通過關鍵字表達式運行測試
pytest -k "MyClass and not method"
注意:執行當前目錄下,名字包含
MyClass
但不包含method
的測試用例,所以上面的示例將運行,TestMyClass.test_something 但不會運行TestMyClass.test_method_simple。
- 按節點ID運行測試
每個收集的測試都分配有一個唯一的nodeid名稱,該名稱由模塊文件名后跟說明符(例如類名,函數名和參數化參數)組成,並用::字符分隔。
要在模塊中運行特定的測試,請執行以下操作:
pytest test_file::test_case
test_file,為.py文件
test_case, 為test_file.py中的一個測試用例
在命令行中指定測試方法的另一個示例:命令格式:pytest 文件名.py::測試類::測試方法
pytest test_mod.py::
TestSuite
::test_case
test_case,為TestSuite的成員函數
- 通過標記表達式運行測試
pytest -m slow
- 從包運行測試
pytest --pyargs pkg.testing
-
這將導入
pkg.testing
並使用其文件系統位置來查找並運行測試
3.從Python代碼中調用pytest
pytest.main(["-x", "mytestdir"])
注意:調用pytest.main()將導致導入您的測試及其導入的任何模塊。由於python導入系統的緩存機制,pytest.main()從同一進程進行后續調用不會反映兩次調用之間對這些文件的更改。因此,pytest.main()不建議從同一進程進行多次調用(例如,以重新運行測試)。
4.修改Python回溯打印
pytest --showlocals # 打印本地變量 pytest -l # 打印本地變量 pytest --tb=auto # 默認模式 pytest --tb=long # 盡可能詳細的輸出 pytest --tb=short # 更簡短的輸出 pytest --tb=line # 每個失敗信息總結在一行中 pytest --tb=native # Python 標准輸出 pytest --tb=no # 不打印失敗信息
--full-trace
是一種比--tb=long
更詳細的輸出模式。它甚至能觀察到用戶打斷執行(Ctrl+C
)時的回溯信息,而上述六種模式默認是不輸出此類信息的。
5.分析測試執行持續時間
要獲取最慢的10個測試持續時間的列表:
pytest --durations=10
默認情況下,除非
-vv
在命令行中傳遞,否則pytest不會顯示太短的測試持續時間(<0.01s)
6.獲取版本,選項名稱,環境變量
pytest --version # 獲取版本 pytest --fixtures # 顯示可用的內置函數參數 pytest -h | --help # 幫助
7.通過python -m pytest
調用pytest
可以從命令行通過Python解釋器調用測試:
python -m pytest [...]
但是,這和直接執行pytest [...]
命令的效果幾乎是一模一樣