Pytest之收集用例及命令行參數

28
2020-07
今天距2021年156天
這是ITester軟件測試小棧第146次推文

點擊上方藍字“ITester軟件測試小棧“關注我,每周一、三、五早上?07:30準時推送。
微信公眾號后臺回復“資源”、“測試工具包”領取測試資源,回復“微信群”一起打怪升級。
本文2010字,閱讀約需7分鐘
用例收集
從一個或者多個目錄開始查找,你可以在命令行指定文件或者目錄,如果未指定那么從當前目錄開始收集用例;
在該目錄和所有子目錄下遞歸查找測試模塊;
測試模塊是指文件名為
test_*.py或者*_test.py的文件;在測試模塊中查找以
test_開頭的函數;查找名字以
Test開頭的類。其中首先篩選掉包含__init__()函數的類,再查找類中以test_開頭的類方法。
現有項目結構如下:

具體代碼:
login/test_login.py
class?TestLogin:
????def?test_demo01(self):
????????a?=?1
????????assert?a?==?1
????def?add(self):
????????b?=?1
????????c?=?2
????????assert?b?+?c?==?3
pay/test_pay.py
def?test_pay():
????name?=?"vivi"
????assert?"v"?in?name
test_demo.py
def?test_demo02():
????print("這是demo02")
????a?=?1
????assert?a?==?1
切換到項目路徑,在命令行輸入:pytest -v
輸出結果為:

根據用例收集規(guī)則,TestLogin類中add方法不是以test開頭,所以pytest不會收集。
命令行參數
1
命令行模式下,輸入:pytest --help
說明:出現詳細的命令行參數。

① pytest -v
說明:可以輸出用例更加詳細的執(zhí)行信息,比如用例所在的文件及用例名稱等。

② pytest -s
說明:輸出用例中的調式信息,比如print的打印信息等。
test_demo.py
def?test_demo02():
????print("這是demo02")
????a?=?1
????assert?a?==?1
命令行輸入:pytest -s test_demo.py

③pytest -m
說明:用于標記測試并分組,執(zhí)行特定的測試用例。
這個在后續(xù)打標記文章詳細解釋,此處暫不介紹。
④pytest -k
說明:可以通過表達式運行指定的測試用例。
比如使用命令:pytest -k "test_demo01 or test_demo02",就會指定運行test_demo01和test_demo02兩條用例。

⑤pytest -q
說明:簡化輸出信息。

⑥pytest -x
說明:遇到錯誤或者用例不通過,則退出執(zhí)行。
手動將login/test_login.py中的用例改成不通過。

輸入命令:pytest -v -x

收集用例3個,但第二個test_demo01用例執(zhí)行失敗,就會全局停止執(zhí)行,所以第三個用例將不會執(zhí)行。
⑦pytest --lf
說明:--last-failed 只重新運行上次運行失敗的用例(或如果沒有失敗的話會全部跑)。
命令行輸入: pytest -v --lf

通過運行結果看出,本次用例只是運行了上次運行錯誤的測試用例test_demo01。
⑧pytest --ff
說明:--failed-first,先執(zhí)行完上次失敗的測試后,再執(zhí)行上次正常的測試用例。
輸入命令:pytest -v --ff

通過運行結果看出,本次運行,先運行了上次失敗的用例,然后執(zhí)行正常的測試用例。
⑨pytest --maxfail=num
說明:用例運行時,允許的最大失敗次數,超過則立即停止執(zhí)行。
輸入命令:pytest -v --maxfail=2

⑩?運行指定用例
模塊、類、函數及方法之間用::進行分割。
我們先看下之前運行的結果圖。

比如想運行TestLogin類下的測試用例。
使用命令:pytest -v login/test_login.py::TestLogin



測試交流Q群:727998947

