1. 程式人生 > 程式設計 >Python 測試框架unittest和pytest的優劣

Python 測試框架unittest和pytest的優劣

一、Unittest

Unittest是Python標準庫中自帶的單元測試框架,Unittest有時候也被稱為PyUnit,就像JUnit是Java語言的標準單元測試框架一樣,Unittest則是Python語言的標準單元測試框架。

Unittest支援自動化測試,測試用例的初始化、關閉和測試用例的聚合等功能,它有一個很重要的特性:它是通過類(class)的方式,將測試用例組織在一起。

示例:

Python 測試框架unittest和pytest的優劣

執行結果

Python 測試框架unittest和pytest的優劣

注:unittest有一個關聯模組unittest2,但unittest2僅適用於Python 2.4-2.6。這是由於從Python 2.7開始,unittest增加一些新的特性。為了在老的版本中支援這些特性,所以提供了unittest2這個庫。但對於Python 2.7及之後的版本,unittest是唯一的。本次示例中使用的為python2.7。

二、Pytest

Pytest是Python的另一個第三方單元測試庫。它的目的是讓單元測試變得更容易,並且也能擴充套件到支援應用層面複雜的功能測試。

pytest的特性有:

  • 支援用簡單的assert語句實現豐富的斷言,無需複雜的self.assert*函式
  • 自動識別測試模組和測試函式
  • 模組化夾具用以管理各類測試資源
  • 對 unittest 完全相容,對 nose基本相容
  • 支援Python3和PyPy3
  • 豐富的外掛生態,已有300多個各式各樣的外掛,社群繁榮

示例:

Python 測試框架unittest和pytest的優劣

執行結果:

Python 測試框架unittest和pytest的優劣

三、Unittest vs Pytest

unittest pytest
用例編寫規則 1)測試檔案必須先import unittest

2)測試類必須繼承unittest.TestCase

3)測試方法必須以“test_”開頭

4)測試類必須要有unittest.main()方法

1)測試檔名必須以“test_”開頭或者"_test"結尾(如:test_ab.py)

2)測試方法必須以“test_”開頭

3)測試類命名以"Test"開頭

用例分類執行 預設執行全部用例,也可以通過載入testsuit,執行部分用例 可以通過@pytest.mark來標記類和方法,pytest.main加入引數("-m")可以只執行標記的類和方法
用例前置和後置 提供了setUp/tearDown,只能針對所有用例
pytest中的fixture顯然更加靈活。可以任意自定義方法函式,只要加上@pytest.fixture()這個裝飾器,那麼被裝飾的方法就可以被使用
引數化 需依賴ddt庫 使用@pytest.mark.parametrize裝飾器
斷言
很多斷言格式(assertEqual、assertIn、assertTrue、assertFalse)
只有assert一個表示式,用起來比較方便
報告 使用HTMLTestRunnerNew庫 有pytest-HTML、allure外掛
失敗重跑 無此功能 pytest支援用例執行失敗重跑,pytest-rerunfailures外掛

總結:

總體來說,unittest用例格式複雜,相容性無,外掛少,二次開發方便。pytest更加方便快捷,用例格式簡單,可以執行unittest風格的測試用例,無須修改unittest用例的任何程式碼,有較好的相容性。pytest外掛豐富,比如flask外掛,可用於用例出錯重跑,還有xdist外掛,可用於裝置並行執行,效率更高。

以上就是Python 測試框架unittest和pytest的優劣的詳細內容,更多關於Python unittest和pytest的資料請關注我們其它相關文章!