作者:Gakki
01 Unittest
Unittest 是 Python標(biāo)準(zhǔn)庫中自帶的單元測(cè)試框架
Unittest 支持自動(dòng)化測(cè)試些膨,測(cè)試用例的初始化、關(guān)閉和測(cè)試用例的聚合等功能钦铺,它有一個(gè)很重要的特性:它是通過類 ( class )的方式订雾,將測(cè)試用例組織在一起。
02 Pytest
Pytest 是Python 的另一個(gè)第三方單元測(cè)試庫矛洞。它的目的是讓單元測(cè)試變得更容易洼哎,并且也能擴(kuò)展到支持應(yīng)用層面復(fù)雜的功能測(cè)試。
Pytest 的特性有:
- 支持用簡(jiǎn)單的 assert 語句實(shí)現(xiàn)豐富的斷言,無需復(fù)雜的 self.assert* 函數(shù)
- 自動(dòng)識(shí)別測(cè)試模塊和測(cè)試函數(shù)
- 模塊化夾具用以管理各類測(cè)試資源
- 對(duì) Unittest 完全兼容噩峦,對(duì) nose 基本兼容
- 豐富的插件生態(tài)
03 Unittest VS Pytest
區(qū)別 | Unittest | Pytest |
---|---|---|
用例編寫規(guī)則 | 1) 測(cè)試文件必須先 import unittest 2) 測(cè)試類必須繼承unittest.TestCase 3) 測(cè)試方法必須以 " test_ " 開頭 4) 測(cè)試類必須要有unittest.man()方法 |
1) 測(cè)試文件必須以 " test_ " 開頭或者 "_ test " 結(jié)尾锭沟。如:test_login.py 2) 測(cè)試方法必須以 " test_ " 開頭 3) 測(cè)試類命名以 " Test " 開頭 |
用例分類執(zhí)行 | 默認(rèn)執(zhí)行全部用例,也可以通過加載testsuit识补,執(zhí)行部分用例 | 可以通過@pytest.mark來標(biāo)記類和方法族淮,pytest.main加入?yún)?shù) ( " -m " ) 可以只運(yùn)行標(biāo)記的類和方法 |
用例前置和后置 | 提供了setUp/tearDown,只能針對(duì)所有用例 | pytest中的fixture顯然更加靈活李请∏粕福可以任意自定義方法函數(shù),只要加上@pytest.fixture()這個(gè)裝飾器导盅,那么被裝飾的方法就可以被使用 |
參數(shù)化 | 需依賴ddt庫 | 使用@pytest.mark.parametrize裝飾器 |
斷言 | 很多斷言格式(assertEqual较幌、assertIn、assertTrue白翻、assertFalse) | 只有assert一個(gè)表達(dá)式乍炉,用起來比較方便 |
報(bào)告 | 使用HTMLTestRunnerNew庫 | 有pytest-HTML、allure插件 |
失敗重跑 | 無此功能 | pytest支持用例執(zhí)行失敗重跑滤馍,pytest-rerunfailures插件 |
- 總體來說岛琼,Unittest 用例格式復(fù)雜,兼容性無巢株,插件少槐瑞,二次開發(fā)方便。Pytest 更加方便快捷阁苞,用例格式簡(jiǎn)單困檩,可以執(zhí)行 Unittest 風(fēng)格的測(cè)試用例,無須修改 Unittest 用例的任何代碼那槽,有較好的兼容性悼沿。Pytest 插件豐富,比如flask插件骚灸,可用于用例出錯(cuò)重跑糟趾,還有xdist插件,可用于設(shè)備并行執(zhí)行甚牲,效率更高义郑。