19 - pytest 框架與 unittest 框架的對比


一、pytest 的優勢

pytest是基於 unittest 之上的單元測試框架,它的優勢如下:

  • 自動發現測試模塊和測試方法
    • 默認從當前目錄中搜集測試用例,即在那個目錄下運行pytest 命令,則從那個目錄當中搜索  
      1. 搜索規則:進入目錄后,在按照搜索規則搜索用例    
      2. 符合命名規則 test_*.py 或者 *_test.py 的文件
      3. 以 test_ 開頭的函數名
      4. 以 Test 開頭的測試類(沒有 _init_ 函數)當中,以 test_ 開頭的函數
    • import pytest
      
      if __name__ == '__main__':
          pytest.main()
  • 斷言使用 assert + 表達式
  • 可以設置測試會話級(session)、模塊級(module)、類級(class)、函數級(function)的 fixture 來共享測試用例的前置和后置
  • 有豐富的插件庫,目前已經700+ ,pytest插件地址:http://plugincompat.herokuapp.com/

二、與unittest的對比

1.用例設計規划

  • unittest
    • 測試類必須繼承 unittest.TestCase
    • 測試函數必須以 “test_” 開頭
    • 使用defaultTestLoader.descover()加載測試用例時,測試模塊( py文件)名稱要以test開頭 
  • pytest
    • 測試模塊文件的文件名必須以"test_ "開頭或者以" _test"結尾  
    • 測試類命名必須以"Test"開頭  
    • 測試函數名必須以"test"開頭  
    • 測試類里面不能使用" _init_ "方法  

2.斷言對比

  • unittest斷言
    • assertEqual(a, b)     判斷a和b是否相等  
    • assertNotEqual(a, b)     判斷a不等於b  
    • assertTrue(a)     判斷a是否為Ture  
    • assertFalse(a)     判斷a是否為False  
    • assertIn(a, b)     a包含在b里面  
    • asserNotIn(a, b)     a不包含在b里面  
  • pytest斷言
    • assert + 表達式  

3.用例前置和后置

  • unittest前置和后置
    • 通過setup每個用例執行前執行,teardown每個用例執行后執行  
    • 通過setupclass類里面所有用例執行前執行,teardownclass類里面所有用例執行后執行  
  • pytest前置和后置
    • 會話級別: session,整個測試執行會話全部用例開始前執行/全部用例執行完后執行  
    • 模塊級別: module,只對模塊級別生效,整個.py全部用例開始前執行/全部用例執行完后執行  
    • 類級別: class,只對類級別生效,整個測試類全部用例開始前執行/全部用例執行完后執行  
    • 函數級別: function,只對函數級別生效,每個用例開始前和結束后執行一次  

4.參數化

  • unittest參數化
    • 結合ddt模塊,在類上面使用@ddt裝飾,測試用例的方法上使用@data0來來實現數據驅動  
  • pytest參數化
    • 通過裝飾器@pytest.mark.parametrize來實現數據驅動  

5.生成報告方式

  • unittest
    • 通過HTMLTestRunner生成  
  • pytest
    • 通過pytest-html生 成html格式報告  
    • 通過與allure集成生成優美的allure報告  

 

*******尊重作者,本文是本人轉載自:https://www.cnblogs.com/xiaogongjin/    ******* 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM