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