01 pytest基礎(chǔ)-十分鐘之自動化

本文內(nèi)容概覽

image.png

pytest能實現(xiàn)的功能(簡介)

  1. 自動發(fā)現(xiàn)測試用例:pytest會自動查找項目中以test_test開頭的文件、以Test開頭的類和以test_test開頭的函數(shù),并執(zhí)行它們作為測試用例。

  2. 靈活的測試用例編寫:pytest允許使用簡潔的語法編寫測試用例,可以使用函數(shù)、類和裝飾器等方式組織測試代碼。這使得測試用例的編寫更加靈活和易于維護(hù)。

  3. 豐富的斷言庫:pytest提供了豐富的斷言方法,用于驗證測試結(jié)果是否符合預(yù)期。這些斷言方法包括比較運算符、容器操作、異常處理等。使用這些斷言方法可以編寫清晰、簡潔的斷言語句。

  4. 參數(shù)化測試(parametrize):pytest支持參數(shù)化測試,可以通過一次編寫多個測試用例,并使用不同的參數(shù)進(jìn)行測試。這樣可以減少冗余的代碼,提高測試的覆蓋率。

  5. 豐富的插件生態(tài)系統(tǒng):pytest具有一個活躍的插件生態(tài)系統(tǒng),可以通過安裝插件來擴展其功能。這些插件可以用于生成測試報告、集成持續(xù)集成工具、模擬網(wǎng)絡(luò)請求等。插件的使用可以根據(jù)需求定制測試框架的功能。

  6. 并發(fā)執(zhí)行測試:pytest支持并發(fā)執(zhí)行測試用例,可以提高測試的效率。這對于大型項目和長時間運行的測試套件特別有用。

  7. 集成其他測試工具:pytest可以與其他測試工具(如Selenium、Mock等)進(jìn)行集成,方便進(jìn)行更復(fù)雜的測試場景。這樣可以擴展pytest的功能,滿足特定的測試需求。

安裝

pip3 install -U pytest
image.png

顯示 Successfully installed 代表安裝好了
注意
如果安裝過慢可以更改下載源來增加下載安裝速度 這里可以更改安裝源(這里以清華源為例)
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

更改后再執(zhí)行 pip 安裝命令安裝即可

默認(rèn)用例執(zhí)行規(guī)則

pytest會自動查找項目中以test_test開頭的文件、以Test開頭的類和以test_test開頭的函數(shù),并將它們作為測試用例執(zhí)行。
pytest會遞歸地搜索項目目錄及其子目錄中的測試文件,找到所有符合命名規(guī)則的測試用例

總結(jié)就是

  1. 文件要以test_*.py*_test.py命名
  2. 測試類要以Test開頭
  3. 函數(shù)要以 test 或者 test_開頭

pycharm編寫運行第一個測試用例

"""編寫的第一個case"""
def test_01_case():
    print("test_01_case")


class TestFirstCase(object):    
    def test_class_case(self):
        print("test_class_case")

    def no_test_case(self):
        print("no_test_case")


def no_test_case2():
    print("no_test_case")

image.png

可以看到按照規(guī)則寫的pytest收集到并執(zhí)行了

運行方式

執(zhí)行的三種方式

  1. 命令行執(zhí)行
pytest + 執(zhí)行參數(shù)
py.test + 執(zhí)行參數(shù)
python -m pytest + 執(zhí)行參數(shù)

這里插播介紹兩個常用的執(zhí)行參數(shù) (-s -v)

允許直接打印測試函數(shù)中的輸出

pytest -s  # 允許直接打印測試函數(shù)中的輸出
image.png

顯示詳細(xì)的測試結(jié)果信息

pytest -v  
image.png
  1. py文件中調(diào)用
import pytest

if __name__ == '__main__':
    pytest.main(["執(zhí)行參數(shù)"])  // 列表中放執(zhí)行參數(shù) 
  1. pycharm 中執(zhí)行 (需要設(shè)置好pycharm的Default test runner)


    image.png

    image.png

運行規(guī)則

執(zhí)行文件夾下所有的case


pytest  /指定目錄
# 或者 cd到這個目錄下執(zhí)行 pytest
pytest 

執(zhí)行單個py文件

# 指定 pytest 具體的文件名
pytest test_xxx.py 

按節(jié)點nodeid運行(每個case代表一個節(jié)點nodeid)

  1. pytest 文件名::class::test_case (類的方式編寫的case)
  2. pytest 文件路徑/文件名::class::test_case
  3. pytest 文件名::test_case (函數(shù)方式編寫的case)
  4. pytest 文件路徑/文件名::test_case
 # 執(zhí)行類中具體的某一條case   
 pytest test_01_first_case.py::TestFirstCase::test_class_case                           
 # 執(zhí)行類
 pytest test_01_first_case.py::TestFirstCase
# 執(zhí)行某一條case
pytest test_01_first_case.py::test_01_case
# 執(zhí)行文件
pytest test_01_first_case.py

按關(guān)鍵詞運行

# 運行名稱包含 case但是不包含class的用例
pytest -k "case and not class" -v   

按照標(biāo)記運行

這里不具體講 等到學(xué)習(xí)mark的時候再展開說

# 這樣就會運行 指定標(biāo)記的case
pytest -m 標(biāo)記 

斷言

斷言用于驗證測試結(jié)果是否符合預(yù)期
pytest的斷言比較簡單 直接使用python內(nèi)置的 assert 即可進(jìn)行斷言
基本語法

assert 表達(dá)式 
  1. 當(dāng)表達(dá)式結(jié)果為 True時 斷言通過
  2. 當(dāng)表達(dá)式為False時 斷言失敗 本條case算是失敗 然后繼續(xù)跑后續(xù)的case
def test_01_case():
    print("test_01_case")
    assert 1 != 1   # 這里 1 != 1  結(jié)果是False 所以這條case失敗

這里 1 != 1 結(jié)果是False 所以這條case失敗


image.png

一些常用的斷言

  1. assert a >= b
  2. assert a == b
  3. assert len(a) == len(b) # 容器類的斷言(如列表、字典)
  4. assert a in b

附加知識:對于拋出的異常pytest允許使用pytest.raises裝飾器來斷言代碼是否拋出了預(yù)期的異常
例如,pytest.raises(ZeroDivisionError)用于斷言被裝飾的代碼塊是否拋出了0作為被除數(shù)的異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容