Python測試框架之unittest和pytest

2021-02-20 搜狗測試
目前搜狗商城接口測試框架用的是unittest+HTMLTestRunner,case數有1097條,目前運行一次自動化測試,時長約為30分鐘,期望控制在10分鐘或者更短的時間內。近期打算重新優化框架,著重解決運行效率低的問題。最近調研了一下另一種主流測試框架Pytest,Pytest是一個非常成熟的全功能的Python測試框架,本文主要對比了Unittest和Pytest這兩種較為流行的Python測試框架。

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

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

示例:

執行結果:

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

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

pytest的特性有:

支持用簡單的assert語句實現豐富的斷言,無需複雜的self.assert*函數

自動識別測試模塊和測試函數

模塊化夾具用以管理各類測試資源

對 unittest 完全兼容,對 nose基本兼容

支持Python3和PyPy3

豐富的插件生態,已有300多個各式各樣的插件,社區繁榮

示例:

執行結果:


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插件,可用於設備並行執行,效率更高。

搜狗測試微信號:Qa_xiaoming

搜狗測試QQ粉絲群:459645679

相關焦點

  • Python 測試框架之 Unittest & Pytest
    a + b"""setUp():每個測試case運行之前運行tearDown():每個測試case運行完之後執行setUpClass():必須使用@classmethod 裝飾器, 所有case運行之前只運行一次tearDownClass():必須使用@classmethod裝飾器, 所有case運行完之後只運行一次"""class MyTestCase(unittest.TestCase
  • python單元測試框架pytest簡介
    1、Pytest介紹pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比
  • Python自動化測試框架神器--Pytest!
    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,功能更強大。提供完善的在線文檔,並有著大量的第三方插件和內置幫助,適用於許多小型或大型項目。適合簡單的單元測試到複雜的功能測試。還可以執行 nose, unittest 和 doctest 風格的測試用例。
  • Pytest 測試框架入門
    本文作者:劉春明原文連結:http://blog.csdn.net/liuchunming033/1、 Pytest 介紹pytest 是 python 的一種單元測試框架,與 python 自帶的 unittest 測試框架類似,但是比 unittest 框架使用起來更簡潔,效率更高。
  • 手把手教你pytest測試框架
    話說影影同學是我們班的學霸呢,我也經常向她諮詢問題,也和她探討問題,我覺得她比我學得好所以呢,我想說,我們大家在學習的時候,一定要多多互相交流,千萬別閉門造車,而且要樂於分享,這樣才能共同進步!好了,下面正題開始~pytest測試框架簡介pytest是Python的測試框架,類似於unittest,但比unittest更簡潔,直接,易上手,功能更強大,且可兼容unittest的代碼。它可以實現,執行用例時跳過某些用例、用例執行失敗後可重新執行、對執行失敗的用例進行標記等。
  • python3.6編寫的單元測試示例
    (上)python pytest進階之fixture詳解python pytest進階之conftest.py詳解pytest之assert斷言的具體使用Pytest接口自動化測試框架搭建模板Python基於Hypothesis高級測試庫生成測試數據pytest配置文件pytest.ini的詳細使用Pytest中skip和skipif的具體使用方法python中pytest
  • Pytest進行UI自動化測試實用操作
    背景在UI自動化測試中,很多都使用selenium結合unitest框架進行自動化測試,unittest框架是python自帶框架,但unittest不夠靈活,例如:用例前置和後置unittest提供了setUp/tearDown,都是針對所有用例執行,不能單獨執行失敗用例,也不能單獨執行標記用例,並且unittest要遵循一定格式。
  • Python文件名的匹配之clob庫
    Python unittest裝飾器實現原理及代碼對python的unittest架構公共參數token提取方法詳解Python單元測試工具doctest和unittest詳細使用解析>Python + Requests + Unittest接口自動化測試實例分析python pytest進階之fixture詳解python pytest進階之conftest.py詳解pytest之assert斷言的具體使用
  • python unittest之加載及跳過測試方法和示例
    前言在python unittest框架中,內置了用例加載及跳過的標準函數。其加載用例通過TestLoader類實現,而跳過測試方法則通過unittest.skip()類實現。下面我們一起來學習下。通過該命令,unittest測試框架會嘗試在當前目錄及其子目錄加載所有滿足要求的測試(注意:所有的用例模塊應該以test開頭進行命名,默認加載test開頭的模塊)
  • PyTest測試框架總結篇一 ~ 框架介紹、斷言、跳過及運行
    今天我們來說說pytest測試框架,剛好個人也總結下~首先,pytest是一個非常成熟的全功能的Python測試框架,主要特點有以下幾點:1.簡單靈活,容易上手,文檔豐富;2.支持參數化,可以細粒度地控制要測試的測試用例;3.能夠支持簡單的單元測試和複雜的功能測試,還可以結合selenium、appnium等自動化測試、接口自動化測試
  • Pytest學習(一)- 入門及基礎
    三、為什麼要使用Pytest就Python的測試框架而言,目前比較流行的就是pytest和unittest,unittest廣為人知,但就現在而言是老框架了,但是依舊有那麼多喜歡使用他來做自動化測試,我猜想大部分人都和我一樣,早期是從蟲師開始接觸和熟悉Python自動化的。
  • Python 的單元測試之 unittest
    /06/Python的測試之unittest.html如有好文章投稿,請點擊 → 這裡了解詳情OverviewBasic example隨著項目的不斷擴大,單元測試在保證開發效率、可維護性和軟體質量等方面的地位越發舉足輕重,是一本萬利的舉措。
  • Pytest的簡單應用
    一、Pytest介紹Pytest是基於python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。1、特性:非常容易上手,入門簡單,文檔豐富,文檔中有很多實例可以參考能夠支持簡單的單元測試和複雜的功能測試支持參數化執行測試過程中可以將某些測試跳過,或者對某些預期失敗的case標記成失敗支持重複執行失敗的case支持運行由nose, unittest編寫的測試case具有很多第三方插件,並且可以自定義擴展方便的和持續集成工具集成2、常用拓展
  • 7k Star 的 Python 測試框架入門指南
    Pytest 是一款 Python 測試框架及測試運行器。在本指南中,我們將會介紹 pytest 最有用和常見的配置和用法,以及幾個 pytest 插件和外部庫。儘管 Python 的標準庫中已經自帶了 unittest 模塊,並且也還有其他 Python 測試框架(例如 nose2 或 Ward),但 pytest 仍然是我的最愛。
  • unittest---unittest簡介紹
    前言  說起python的單元測試,第一反應肯定就會是unittest,unittest作為python的標準庫,很優秀,也被廣泛的用到各個項目,但是你們知道嗎
  • Pytest 測試框架——數據驅動
    這是無量測試之道的第181篇原創引言前面的推文已經和大家介紹過 Unittest 測試框架的數據驅動框架 DDT,以及其實現原理
  • Pytest測試用例之setup與teardown方法(一)
    學過unittest框架的大家都知道裡面 [前置/後置setup/teardown ]非常好,用來寫一些每個case執行前都需要執行的公用代碼 [ 作用:在每次用例開始前和結束後都去執行一次 ]例如我們的進入產品前可能都需要打開瀏覽器登錄等,執行完畢後需要關閉瀏覽器等,這些我們都可以用前置後置初始化環境去實現的,然後這樣的前置後置方法有很多,你們了解嗎?
  • Python測試開發庫及項目(超全面!)
    -- 推薦https://github.com/HypothesisWorks/hypothesis-python unittest - (Python 標準庫) 單元測試框架-- 推薦 https://docs.python.org/2/library/unittest.html https://github.com/nestorsalceda/
  • 使用 uiautomator2+pytest+allure 進行 Android 的 UI 自動化測試
    前言最近正在學習python的pytest框架,和之前使用的unittest框架有很大區別.剛使用pytest框架也非常不習慣,主要是和原來的編程思想有很多區別
  • pytest按tag動態挑選測試用例
    pytest是個成熟全套的python 自動化測試工具。