1袁辈、Pytest安裝
CMD命令窗口執(zhí)行Pytest測試框架安裝命令:pip install -U pytest
(意思是如果沒有安裝,就進(jìn)行安裝,如果已安裝就升級到最新版)
檢查Pytest測試框架是否安裝成功:pytest –-version
C:\Users\L>pytest --version
pytest 6.1.2
2、Pytest常用插件
Pytest有很多非常強(qiáng)大的第三方插件,并且這些插件能夠?qū)崿F(xiàn)很多實用的操作叁征,并且還可以自定義Pytest插件。
比較好用的例如:
-
pytest-selenium
:集成Selenium逛薇。 -
pytest-html
:生成html格式的自動化測試報告捺疼。 -
pytest-rerunfailures
:失敗case重復(fù)執(zhí)行。 -
pytest-xdist
:測試用例分布式執(zhí)行永罚,也可以說是多CPU分發(fā)啤呼。 -
pytest-ordering
:用于改變測試用例的執(zhí)行順序。 -
allure-pytest
:用于生成美觀的測試報告呢袱。
Pytest插件列表網(wǎng)址: https://plugincompat.herokuapp.com官扣,里面包含很多插件包,?家可依據(jù)?作的需求選擇使?羞福。
說明:我常用安裝Python工具包的方式惕蹄。
一個Python項目中可能會安裝很多安裝包,再次創(chuàng)建虛擬環(huán)境(新項目)是需要重新安裝的治专,這很麻煩也費時間卖陵,或者項目部署的時候避免重裝。
可以將現(xiàn)有項目的所有安裝包記錄在
requirements.txt
文件张峰,再另一個環(huán)境下一鍵安裝所有安裝包泪蔫。
requirements.txt
文件,用于記錄所有依賴包及其精確的版本號喘批,以便在新環(huán)境中進(jìn)行部署操作撩荣。
使用以下命令將當(dāng)前虛擬環(huán)境中的依賴包以版本號生成至文件中:
pip freeze > requirements.txt
當(dāng)需要創(chuàng)建這個虛擬環(huán)境的完全副本铣揉,可以創(chuàng)建一個新的虛擬環(huán)境,并在其上運行以下命令:
pip install -r requirements.txt
如上所說:
我們可以把所有插件的模塊名都寫入一個.txt
文件夾中餐曹。
pytest-html
pytest-rerunfailures
pytest-xdist
pytest-ordering
allure-pytest
然后在CMD命令行中執(zhí)行pip install -r requirements.txt
命令即可逛拱。(全局安裝)
也可以在PyCharm中的命令行執(zhí)行,但只針對于該項目台猴。
提示:可以安裝指定版本的模塊
通過使用
==
朽合、>=
、<=
卿吐、> <
來指定版本旁舰,不寫則安裝最新版锋华。例如:
pip install pytest-xdist==2.2.0
將安裝
pytest-xdist
模塊2.2.0版本嗡官。
3、Pytest運行的第一個例子
我們直接在Pycharm例編寫代碼就可以毯焕。
"""
1.學(xué)習(xí)目標(biāo)
掌握pytest編寫測試用例的基本方法
2.操作步驟
2.1 導(dǎo)入pytest
2.2 直接編寫測試用例
默認(rèn)必須以test開頭衍腥,你也可以到Pytest中修改測試?yán)募_頭。
2.3 執(zhí)行用例
pytest.main("-s 文件名")
3.python assert斷言
assert 條件,"異常信息"
3.需求
"""
# 1.導(dǎo)入pytest
import pytest
# 2.編寫所需的測試用例
# 此類方法表示一個函數(shù)
def test_login():
print("登錄步驟")
# pytest所用的斷言是Python自身斷言assert關(guān)鍵字
assert "abcd" in "abcdefg"
def test_register():
print("注冊步驟")
assert False
# 3.setup和teardown
# def setup_function():
# print("打開瀏覽器/打開APP")
#
# def teardown_function():
# print("關(guān)閉瀏覽器/關(guān)閉APP")
# 3.執(zhí)行測試用例
if __name__ == '__main__':
# 注意過格式纳猫,main參數(shù)是一個列表
pytest.main(["-s", "test_pytest_01.py"])
"""
執(zhí)行結(jié)果:
============================= test session starts =============================
platform win32 -- Python 3.7.7, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: J:\PyCharmWorkSpace\Pytest_d\pytest_demo
collected 2 items
test_pytest_01.py
登錄步驟.
注冊步驟F
(. 表示成功 婆咸,F(xiàn) 表示失敗)
================================== FAILURES ===================================
________________________________ test_register ________________________________
(下面是失敗的具體說明)
def test_register():
print("注冊步驟")
> assert False
E assert False
test_pytest_01.py:28: AssertionError
=========================== short test summary info ===========================
FAILED test_pytest_01.py::test_register - assert False
========================= 1 failed, 1 passed in 0.09s =========================
Process finished with exit code 0
"""
4芜辕、Pytest框架的運行方式
(1)Pytest主函數(shù)模式
-
運行所有測試用例:
pytest.main()
也可以加上參數(shù):
pytest.main(['-vs'])
提示:注意是所用測試用例尚骄,包括不同文件上的測試用例,都會執(zhí)行侵续。
-
執(zhí)行指定文件的測試用例:
pytest.main(['-s','-v','test_a.py'])
也可以
pytest.main(['-vs','test_a.py'])
-
執(zhí)行指定包下的所有測試用例:
pytest.main(['-vs','./interface_testcase'])
提示:main函數(shù)的參數(shù)是一個列表數(shù)據(jù)類型倔丈。
(2)命令行模式
運行所有測試用例:
pytest
-
執(zhí)行指定文件的測試用例:
pytest 文件路徑/文件名
例如:
pytest -vs ./test_a.py
-
執(zhí)行指定包下的所有測試用例:
pytest 包路徑/包名
例如:
pytest -vs ./interface_testcase
(3)通過node id
執(zhí)行指定測試用例
nodeid
由包名+模塊文件名、分隔符状蜗、類名需五、方法名、函數(shù)名轧坎、參數(shù)構(gòu)成宏邮,之間使用::
進(jìn)行分割,舉例如下:
-
運行模塊中的指定用例類
pytest -vs ./interface_testcase/test_interface.py::test_01_func
或者
pytest.main(['-vs' ./interface_testcase/test_interface.py::test_01_func)
-
運行模塊中的指定用例方法
pytest -vs test_interface.py::test_01_func::test_method
或者
pytest.main(['-vs' test_interface.py::test_01_func::test_method)