使用Python 測試架構unittest和pytest
釋出時間:2020-10-31 00:15:19
來源:億速雲
閱讀:72
作者:Leah
本篇文章給大家分享的是有關使用Python 測試架構unittest和pytest,小編覺得挺實用的,是以分享給大家學習,希望大家閱讀完這篇文章後可以有所收獲,話不多說,跟着小編一起來看看吧。
一、Unittest
Unittest是Python标準庫中自帶的單元測試架構,Unittest有時候也被稱為PyUnit,就像JUnit是Java語言的标準單元測試架構一樣,Unittest則是Python語言的标準單元測試架構。
Unittest支援自動化測試,測試用例的初始化、關閉和測試用例的聚合等功能,它有一個很重要的特性:它是通過類(class)的方式,将測試用例組織在一起。
示例:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SYihzY4YDM3UWO4UDMlVzMyQWN0gjZ5gjZ0UjZkNGNl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
運作結果
注: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多個各式各樣的插件,社群繁榮
示例:
執行結果:
三、Unittest vs Pytestunittestpytest
用例編寫規則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,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速雲行業資訊頻道。