Python教程之pytest命令行方式運(yùn)行用例
前言
用命令行方式調(diào)用用例是我們最常用的方式,這方面確實(shí)比java的TestNG框架要好用許多,至少不用寫(xiě)xml文件,為了提供定制化運(yùn)行用例的方式,pytest提供了許多運(yùn)行命令以供定制化運(yùn)行某一類(lèi)測(cè)試用例或者某個(gè)測(cè)試用例等;
pycharm里命令行運(yùn)行用例
在pycharm里寫(xiě)好了測(cè)試用例后如何運(yùn)行呢?pycharm里好像并沒(méi)有像eclipse里提供TestNG用的插件一樣可以一鍵執(zhí)行的方式,那么我們可以使用命令行的方式來(lái)進(jìn)行,如下圖所示為一個(gè)用例文件:
代碼如下:
#-*- coding: utf-8 -*- import pytest class Test_simple(): @pytest.mark.test def test_case1(self): print("testCase1") tof = True assert tof @pytest.mark.normal @pytest.mark.test def test_case2(self): print("testCase2") tof = False assert tof def test_case3(self): print("testCase3") assert True @pytest.mark.test def setup_class(self): print("用于test組") @pytest.mark.normal def setup_class(self): print("用于normal組")
如上所示添加了一個(gè)名為testSimple的工程,內(nèi)添加了一些測(cè)試用例即Test_simple;
想要運(yùn)行用例時(shí)可以打開(kāi)下方的Terminal窗口:
會(huì)自動(dòng)切換到當(dāng)前工程目錄下,而后即可使用pytest的命令了,如下對(duì)運(yùn)行結(jié)果簡(jiǎn)單做下說(shuō)明:
終端中使用pytest
在終端中使用pytest也是和在pycharm中類(lèi)似,如下以windows系統(tǒng)為例:
先切換到用例所在工程或者目錄而后運(yùn)行pytest即可,如下:
linux系統(tǒng)中也是同樣的使用方法,只是如果沒(méi)有為pytest添加軟連接,則需要在pytest前面加上python命令;
用例全部運(yùn)行
全部運(yùn)行時(shí)不需要添加任何后綴,只需要添加命令pytest即可,此時(shí)打印的信息比較簡(jiǎn)單:
E:\pyspace\testSimple>pytest ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 3 items testcase\Test_simple.py .F. [100%] =============================================================================================================================== FAILURES =============================================================================================================================== ________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________ self = <testcase.Test_simple.Test_simple object at 0x00000000038508D0> @pytest.mark.normal @pytest.mark.test def test_case2(self): print("testCase2") tof = False > assert tof E assert False testcase\Test_simple.py:18: AssertionError ------------------------------------------------------------------------------------------------------------------------- Captured stdout call ------------------------------------------------------------------------------------------------------------------------- testCase2 ================================================================================================================== 1 failed, 2 passed in 0.08 seconds ================================================================================================================== E:\pyspace\testSimple>
打印詳情-v
如上圖所示,只顯示了用例時(shí)成功還是失敗,至于里邊的log則沒(méi)有打印,那么如果我們想要看運(yùn)行詳細(xì)信息怎么辦呢?可以加上-v標(biāo)簽,如下:
E:\pyspace\testSimple>pytest -v ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 3 items testcase/Test_simple.py::Test_simple::test_case1 PASSED [ 33%] testcase/Test_simple.py::Test_simple::test_case2 FAILED [ 66%] testcase/Test_simple.py::Test_simple::test_case3 PASSED [100%] =============================================================================================================================== FAILURES =============================================================================================================================== ________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________ self = <testcase.Test_simple.Test_simple object at 0x000000000382EDA0> @pytest.mark.normal @pytest.mark.test def test_case2(self): print("testCase2") tof = False > assert tof E assert False testcase\Test_simple.py:18: AssertionError ------------------------------------------------------------------------------------------------------------------------- Captured stdout call ------------------------------------------------------------------------------------------------------------------------- testCase2 ================================================================================================================== 1 failed, 2 passed in 0.08 seconds ================================================================================================================== E:\pyspace\testSimple>
如上圖會(huì)把詳細(xì)信息都打印出來(lái)
指定組別
如果用例中包含多個(gè)分組,想要只運(yùn)行其中一個(gè)組,則使用-m "組名"
的方式,依然使用如上代碼,運(yùn)行命令和結(jié)果如下:
E:\pyspace\testSimple>pytest -s -m "normal" ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 3 items / 2 deselected / 1 selected testcase\Test_simple.py 用于normal組 testCase2 F =============================================================================================================================== FAILURES =============================================================================================================================== ________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________ self = <testcase.Test_simple.Test_simple object at 0x00000000036D27F0> @pytest.mark.normal @pytest.mark.test def test_case2(self): print("testCase2") tof = False > assert tof E assert False testcase\Test_simple.py:18: AssertionError ================================================================================================================ 1 failed, 2 deselected in 0.07 seconds ================================================================================================================ E:\pyspace\testSimple>
使用表達(dá)式指定某些用例-k
-k
選項(xiàng)允許我們?cè)O(shè)置表達(dá)式來(lái)運(yùn)行某些用例,如下傳參就只運(yùn)行了test_case1和test_case2
E:\pyspace\testSimple>pytest -v -k "case1 or case2" ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 3 items / 1 deselected / 2 selected testcase/Test_simple.py::Test_simple::test_case1 PASSED [ 50%] testcase/Test_simple.py::Test_simple::test_case2 FAILED [100%]
表達(dá)式的寫(xiě)法有許多,可以用全稱(chēng)如test_case1
這樣也可以去掉test_
,除了or
外也可以使用not
來(lái)指定那些用例不跑;
遇到失敗即停止運(yùn)行-x
pytest的原本運(yùn)行規(guī)則是每條用例均執(zhí)行,不管是否有失敗,如果我們想在用例運(yùn)行時(shí)遇到失敗即停止,則可以使用-x
,如下所示,第二條用例失敗后則不再運(yùn)行第三條用例:
E:\pyspace\testSimple>pytest -v -x ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 3 items testcase/Test_simple.py::Test_simple::test_case1 PASSED [ 33%] testcase/Test_simple.py::Test_simple::test_case2 FAILED [ 66%] =============================================================================================================================== FAILURES =============================================================================================================================== ________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________ self = <testcase.Test_simple.Test_simple object at 0x00000000037A9B00> @pytest.mark.normal @pytest.mark.test def test_case2(self): print("testCase2") tof = False > assert tof E assert False testcase\Test_simple.py:18: AssertionError ------------------------------------------------------------------------------------------------------------------------- Captured stdout call ------------------------------------------------------------------------------------------------------------------------- testCase2 ================================================================================================================== 1 failed, 1 passed in 0.08 seconds ================================================================================================================== E:\pyspace\testSimple>
指定運(yùn)行某個(gè)測(cè)試py文件
指定運(yùn)行某個(gè)py文件,只需要接上文件相對(duì)路徑即可:
E:\pyspace\testSimple>pytest -v testcase/Test_example.py ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 1 item testcase/Test_example.py::Test_example::test_aaa PASSED [100%] ======================================================================================================================= 1 passed in 0.02 seconds ======================================================================================================================= E:\pyspace\testSimple>
指定運(yùn)行某個(gè)class
寫(xiě)法為:py文件路徑::class名稱(chēng)
,范例如下:
E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2 ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 1 item testcase/Test_example.py::Test_example2::test_bbb PASSED [100%] ======================================================================================================================= 1 passed in 0.08 seconds ======================================================================================================================= E:\pyspace\testSimple>
指定運(yùn)行某個(gè)方法:
寫(xiě)法為:py文件路徑::class名稱(chēng)::method名稱(chēng)
,范例如下:
E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2 ========================================================================================================================= test session starts ========================================================================================================================== platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'} rootdir: E:\pyspace\testSimple plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3 collected 1 item testcase/Test_example.py::Test_example2::test_bbb PASSED [100%] ======================================================================================================================= 1 passed in 0.08 seconds ======================================================================================================================= E:\pyspace\testSimple>
如上幾種也可以組合使用;
其他
pytest還包含許多其他用法,具體用法可以使用pytest --help
來(lái)查看,如下:
總結(jié)
到此這篇關(guān)于Python教程之pytest命令行方式運(yùn)行的文章就介紹到這了,更多相關(guān)pytest命令行方式運(yùn)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實(shí)例
今天小編就為大家分享一篇Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python3 圖片referer防盜鏈的實(shí)現(xiàn)方法
本篇文章主要介紹了python3 圖片referer防盜鏈的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Python內(nèi)置數(shù)學(xué)函數(shù)和math模塊使用指南
這篇文章主要為大家介紹了Python數(shù)學(xué)函數(shù)math模塊使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-113個(gè)Python?SQLAlchemy數(shù)據(jù)庫(kù)操作功能詳解
Python?SQLAlchemy?是一個(gè)強(qiáng)大且多功能的?Python?SQL?工具包和對(duì)象關(guān)系映射?(ORM)?系統(tǒng),提供了一整套眾所周知的企業(yè)級(jí)持久性模式,本文為大家整理了它必須了解的3個(gè)數(shù)據(jù)庫(kù)操作功能,希望對(duì)大家有所幫助2023-09-09Pycharm學(xué)習(xí)教程(4) Python解釋器的相關(guān)配置
這篇文章主要為大家詳細(xì)介紹了最全的Pycharm學(xué)習(xí)教程第四篇,Python解釋器配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-07-07Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)
這篇文章主要介紹了Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02