W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
通常,pytest 使用命令 ?pytest
?調(diào)用。這將執(zhí)行當前目錄及其子目錄中名稱遵循 ?test_*.py
? 或 ?\*_test.py
? 形式的所有文件中的所有測試。 更一般地說,pytest 遵循標準的測試發(fā)現(xiàn)規(guī)則。
Pytest 支持多種從命令行運行和選擇測試的方法。
pytest test_mod.py
pytest testing/
pytest -k "MyClass and not method"
這將運行包含與給定字符串表達式匹配的名稱(不區(qū)分大小寫)的測試,其中可以包括使用文件名、類名和函數(shù)名作為變量的 Python 運算符。 上面的示例將運行 ?TestMyClass.test_something
? 但不是 ?TestMyClass.test_method_simple
?
每個收集到的測試都分配有一個唯一的 ?nodeid
?,它由模塊文件名和后面的說明符組成,如類名、函數(shù)名和來自參數(shù)化的參數(shù),用?::
?字符分隔。
要在模塊中運行特定測試:
pytest test_mod.py::test_func
在命令行中指定測試方法的另一個示例:
pytest test_mod.py::TestClass::test_method
pytest -m slow
將運行所有使用 ?@pytest.mark.slow
? 裝飾器裝飾的測試。
pytest --pyargs pkg.testing
這將導入 ?pkg.testing
? 并使用其文件系統(tǒng)位置來查找和運行測試。
pytest --version # shows where pytest was imported from
pytest --fixtures # show available builtin function arguments
pytest -h | --help # show help on command line and config file options
要獲得超過1.0秒的最慢10個測試持續(xù)時間的列表:
pytest --durations=10 --durations-min=1.0
默認情況下,除非在命令行上傳遞了? -vv
?,否則 pytest 不會顯示太?。?lt;0.005s)的測試持續(xù)時間。
您可以使用 ?-p
? 選項在命令行中顯式地提前加載插件(內(nèi)部和外部):
pytest -p mypluginmodule
該選項接收一個?name
?參數(shù),可以是:
myproject.plugins
?。 這個帶點的名稱必須是可導入的。setuptools
?的名稱。 例如,要提前加載 ?pytest-cov
? 插件,您可以使用:pytest -p pytest_cov
要在調(diào)用時禁用加載特定插件,請使用 ?-p
? 選項和前綴 ?no:
?
示例:要禁用加載插件 ?doctest
?,該插件負責從文本文件執(zhí)行 ?doctest
?測試,請像這樣調(diào)用 ?pytest
?:
pytest -p no:doctest
您可以從命令行通過 Python 解釋器調(diào)用測試:
python -m pytest [...]
這幾乎等同于直接調(diào)用命令行腳本 ?pytest [...]
?,只是通過 python 調(diào)用還會將當前目錄添加到 ?sys.path
? 中。
您可以直接從 Python 代碼調(diào)用 ?pytest
?:
retcode = pytest.main()
這就像您從命令行調(diào)用?pytest
?一樣。 它不會引發(fā) ?SystemExit
?而是返回退出代碼。 您可以傳入選項和參數(shù):
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
?已添加并且它的鉤子已被調(diào)用:
$ python myinvoke.py
*** test run reporting finishing
調(diào)用 ?pytest.main()
? 將導致導入您的測試以及它們導入的任何模塊。 由于 python 導入系統(tǒng)的緩存機制,從同一進程對 ?pytest.main()
? 的后續(xù)調(diào)用將不會反映調(diào)用之間對這些文件的更改。 因此,不建議從同一進程多次調(diào)用 ?pytest.main()
?(例如,為了重新運行測試)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: