1. 程式人生 > >關於Python單元測試模組Unitest

關於Python單元測試模組Unitest

單元測試

白盒測試和黑盒測試

  • 白盒測試:是通過程式的原始碼進行測試而不使用使用者介面。這種型別的測試需要從程式碼句法發現內部程式碼在演算法,溢位,路徑,條件等等中的缺點或者錯誤,進而加以修正。黑盒測試:又被稱為功能測試、資料驅動測試或基於規格說明的測試,是通過使用整個軟體或某種軟體功能來嚴格地測試, 而並沒有通過檢查程式的原始碼或者很清楚地瞭解該軟體的原始碼程式具體是怎樣設計的。測試人員通過輸入他們的資料然後看輸出的結果從而瞭解軟體怎樣工作

Python的單元測試模組 UnitTest

  • test case , test suit, test runner, test fixture

測試用例

  • 繼承 unittest.TestCase

  • 內部定義以test_開頭的方法,每個test case 都是單獨執行,如果一個class中有多個 test_XXX 那麼最後在load到suit時也會有多個測試

  • 覆蓋度越高越準確

測試執行後的輸出

  • 第一行給出每個用力執行後的標識,成功時 . ,出錯時 E,失敗時 F, 跳過時 S

  • 在unittest.main() 中可以新增 verbosity 引數,控制最後報告的詳細程度,預設時1,0表示不輸出每一個用例的執行結果,2 輸出詳細的執行結果

使用test suite

  ​
  if __name__ == '__main__':
      suite = unittest.TestSuite()
      # 定義測試的內容列表
      tests = [TestMathFunc('test_add'), TestMathFunc('test_minus')]
      # 新增到測試中,addTest 可以新增單個
      suite.addTests(tests)
      # 定義 runner 執行測試
      runner = unittest.TextTestRunner(verbosity=2)
      runner.run(suite)

測試環境準備

setUp和tearDown

  • 在每個測試用例開始和結束時執行的方法,用於測試環境的準備,清理環境

setUpClass和tearDownClass

  • 在所有的 case 開始之前準備一次環境,所有的 case 結束之後再清理環境

  ​
  class TestModel(unittest.TestCase):
      
      @classmethod
      def setUpClass(cls):
          print('準備環境')
          
      @classmethod
      def tearDownClass(cls):
          print("清理環境")

跳過某個case

  • 使用 裝飾器裝飾方法, @unittest.skip("跳過此方法")

  • skip裝飾器一共有三個 unittest.skip(reason)unittest.skipIf(condition, reason)unittest.skipUnless(condition, reason)skip無條件跳過,skipIf當condition為True時跳過,skipUnless當condition為False時跳過。

輸出 HTML 報告

  ​
  import unittest
  from test_model import TestModel
  from HTMLTestRunner import HTMLTestRunner
  ​
  ​
  if __name__ == '__main__':
      suite = unittest.TestSuite()
      suite.addtests(unittest.TestLoader().loadTestsFromTestCase(TestModel))
      
      with open("test.html", 'w') as f:
          runner = HTMLTestRunner(stream=f, title='Hell test', description="discription", verbosity=2)
          runner.run(suite)