Pytest用法之main函數

簡介

Pytest是當下首先的Python項目單元測試工具。測試時,使用方法有兩種:web

  • 命令行方式(傳遞給Pytest各類參數)
  • 在代碼中直接執行pytest並調用main函數(傳遞進各類參數)

本文將小結使用第二種方式中main函數各類參數的使用問題。app

無參形式

#一些測試單元……
if name == ‘main’:
pytest.main()
不帶任何參數的main()默認運行的是當前目錄及子目錄的全部文件夾的測試用例。ide

參數

Main()函數加參數時指定運行規則時,參數須要放在列表中。能夠指定參數和路徑,經常使用的參數有:
(1)‘-s’:關閉捕捉,輸出打印信息。
(2)‘-v’:用於增長測試用例的冗長。
(3)‘-k’ :運行包含某個字符串的測試用例。如:pytest -k add XX.py 表示運行XX.py中包含add的測試用例。
(4)‘q’:減小測試的運行冗長。
(5)‘-x’:出現一條測試用例失敗就退出測試。在調試階段很是有用,當測試用例失敗時,應該先調試經過,而不是繼續執行測試用例。函數

基礎示例

import pytest工具

@pytest.mark.webtest
def test_send_http():
pass # perform some webtest test for your app單元測試

def test_something_quick():
pass測試

def test_another():
passui

class TestClass:
def test_method(self):
pass命令行

if name == "main":
pytest.main(['-q'])調試

更復雜情形

指定某個測試類或測試方法,用「::」隔開。如:
命令行格式:
pytest 文件名.py::測試方法
代碼行格式:
pytest.main([模塊.py::類或方法])

指定某個測試類下的測試方法,用「::」隔開。如:
命令格式:
pytest 文件名.py::測試類::測試方法
代碼行格式:
pytest.main([模塊.py::類::方法])

pytest.main(["testCase/campaign/test_campaign_list.py::TestListCampaign::test_list_campaign_success"])
指定運行某個目錄下的某個用例,其中路徑爲當前執行文件的相對路徑
pytest.main(["testCase/campaign/test_campaign_list.py"])
運行某個目錄下的所有用例,寫到文件夾名字便可,不須要寫到py文件
pytest.main(["testCase/campaign/"])

其餘情形:

使用-m對用例進行標記,用例需註釋@pytest.mark.xxx,將xxx做爲參數傳入
使用-m "mark1 and mark2"能夠同時選中帶有這兩個標記的全部測試用例。
使用-m "mark1 and not mark2"選中帶喲與mark1的測試用例,而過濾掉帶有mark2的測試用例
使用-m "mark1 or mark2"則選中帶有mark1或者mark2的全部測試用例
"""
pytest.main(["-v","-x"])#-x 遇到錯誤即中止
pytest.main(["-v","--maxfail=2","--tb=no"])#--maxfail=n 設定最多失敗 n 次即中止
pytest.main(["-s"])#容許終端運行時輸出某些結果,例如print
pytest.main(["--lf"])#定位失敗的用例
pytest.main(["--ff"])#定位失敗的用例首先執行,可是正常的用例也會執行
pytest.main(["-q"])#簡化輸出信息

pytest.main(["-l"])#打印失敗用例的變量值

pytest.main(["--tb=short"])

小結

我的感受,Pytest最經典用法仍是命令行方式,所以,充分熟悉其經常使用參數是熟練進行單元測試的基礎。所以,本人建議本文介紹的代碼行內方式宜主要做爲測試量較少且簡單狀況下測試使用。

相關文章
相關標籤/搜索