1-Pytest全棧自動化測試指南- 運(yùn)行
? ?
? ? 通常,使用命令調(diào)用 pytest(有關(guān)調(diào)用 pytest 的其他方法,pytest請參見下文)。這將在名稱遵循表單的所有文件中或?在當(dāng)前目錄及其子目錄中執(zhí)行所有測試。更一般地說,pytest 遵循標(biāo)準(zhǔn)測試發(fā)現(xiàn)規(guī)則。test_*.py*_test.py、
指定要運(yùn)行的測試
Pytest 支持多種從命令行運(yùn)行和選擇測試的方法。
在模塊中運(yùn)行測試
pytest test_mod.py
在目錄中運(yùn)行測試
pytest testing/
通過關(guān)鍵字表達(dá)式運(yùn)行測試
pytest -k?"MyClass and not method"
這將運(yùn)行包含與給定字符串表達(dá)式匹配的名稱(不區(qū)分大小寫)的測試,其中可以包括使用文件名、類名和函數(shù)名作為變量的 Python 運(yùn)算符。上面的例子會運(yùn)行TestMyClass.test_something?,但不會TestMyClass.test_method_simple。
按節(jié)點(diǎn) ID 運(yùn)行測試
每個收集到的測試都被分配一個唯一的nodeid,它由模塊文件名和后面的說明符組成,如類名、函數(shù)名和參數(shù)化的參數(shù),用::字符分隔。
要在模塊中運(yùn)行特定測試:
pytest test_mod.py::test_func
在命令行中指定測試方法的另一個示例:
pytest test_mod.py::TestClass::test_method
通過標(biāo)記表達(dá)式運(yùn)行測試
pytest -m slow
將運(yùn)行所有用@pytest.mark.slow裝飾器裝飾的測試。
有關(guān)詳細(xì)信息,請參閱標(biāo)記。
從包運(yùn)行測試
pytest --pyargs pkg.testing
這將導(dǎo)入pkg.testing并使用其文件系統(tǒng)位置來查找和運(yùn)行測試。
獲取版本、選項名稱、環(huán)境變量的幫助
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
分析測試執(zhí)行持續(xù)時間
在 6.0 版中更改。
要獲得超過 1.0 秒的最慢 10 個測試持續(xù)時間的列表:
pytest --durations=10?--durations-min=1.0
默認(rèn)情況下,pytest 不會顯示太小(<0.005s)的測試持續(xù)時間,除非-vv在命令行上傳遞。
管理插件的加載
早期加載插件
-p您可以使用以下選項在命令行中顯式地提前加載插件(內(nèi)部和外部) :
pytest?-p?mypluginmodule
該選項接收一個name參數(shù),可以是:
完整的模塊名稱,例如myproject.plugins.?這個帶點(diǎn)的名稱必須是可導(dǎo)入的。
插件的入口點(diǎn)名稱。setuptools這是插件注冊時傳遞給的名稱。例如,要提前加載pytest-cov插件,您可以使用:
pytest?-p?pytest_cov
禁用插件
要在調(diào)用時禁用加載特定插件,請將該-p選項與前綴一起使用no:。
示例:要禁用加載doctest負(fù)責(zé)從文本文件執(zhí)行 doctest 測試的插件,請像這樣調(diào)用 pytest:
pytest -p no:doctest
調(diào)用 pytest 的其他方式
您可以從命令行通過 Python 解釋器調(diào)用測試:
python -m pytest [...]
這幾乎等同于?直接調(diào)用命令行腳本,只是調(diào)用 via還會將當(dāng)前目錄添加到.pytest?[...]pythonsys.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?sys
import?pytest
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)入您的測試和它們導(dǎo)入的任何模塊。由于 python 導(dǎo)入系統(tǒng)的緩存機(jī)制,pytest.main()從同一進(jìn)程進(jìn)行后續(xù)調(diào)用不會反映調(diào)用之間對這些文件的更改。因此,pytest.main()不建議從同一進(jìn)程多次調(diào)用(例如,為了重新運(yùn)行測試)。
更多案例,更多內(nèi)容,請點(diǎn)擊
請加入同樂學(xué)堂:61672-7690(Q)
https://edu.csdn.net/course/detail/37237
https://edu.51cto.com/course/32569.html