python 幾種常用測試框架


測試的常用規則

  1. 一個測試單元必須關注一個很小的功能函數,證明它是正確的;
  2. 每個測試單元必須是完全獨立的,必須能單獨運行。這樣意味着每一個測試方法必須重新加載數據,執行完畢后做一些清理工作。通常通過setUp()和setDown()方法處理;
  3. 編寫執行快速的測試代碼。在某些情況下,測試需要加載復雜的數據結構,而且每次執行的時候都要重新加載,這個時候測試執行會很慢。因此,在這種情況下,可以將這種測試放置一個后台的任務中。
  4. 采用測試工具並且學着怎么使用它。
  5. 在編寫代碼前執行完整的測試,而且在編寫代碼后再重新執行一次。這樣能保證你后來編寫的代碼不會破壞任何事情;
  6. 在提交代碼前執行完整的測試;
  7. 如果在開發期間被打斷了工作,寫一個打斷的單元測試,關於你下一步將要開發的。當你回來工作時,你能知道上一步開發到的指針;
  8. 單元測試函數使用長的而且具有描述性的名字。在正式執行代碼中,可能使用square()或sqr()取名,但是在測試函數中,你必須取像test_square_of_number_2()、test_square_negativer_number()這些名字,這些名字描述更加清楚;
  9. 測試代碼必須具有可讀性;
  10. 單元測試對新進的開發人員來說是工作指南。

二、常見的測試框架

2.1 Unittest

unittest是Python內置的標准類庫。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。

通過繼承unittest.TestCase來創建一個測試用例。

具體請參考 文檔 。

舉個例:

import unittest

def fun(x): return x + 1 class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4) 

執行后成功。

但是,如果將期望的結果改成5,則執行的結果如下圖所示:

2.2 Doctest

doctest 模塊會搜索那些看起來像交互式會話的 Python 代碼片段,然后嘗試執行並驗證結果.即使從沒接觸過 doctest,我們也可以從這個名字中窺到一絲端倪。“它看起來就像代碼里的文檔字符串(docstring)一樣” 如果你這么想的話,就已經對了一半了。

舉個例子:

def square(x): """Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod() 

當執行該代碼后,會執行文檔內>>> 后面的測試代碼,並與下一行的結果進行比對。執行的結果如下:

但是,如果我們把結果改一下,square(2)的結果改成5,測試代碼如下:

def square(x): """Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod() 

執行的測試結果如下所示:

2.3 py.test

py.test是unittest的替代工具。

盡管它是一個功能豐富、靈活的測試框架,但是它的語法很簡單。創建一個單元測試就像編寫一個模塊一樣。相比unittest,實現相同的測試功能,py.test做的事情更少。

py.test詳細 文檔 。

首先,安裝py.test

pip install pytest

第二步,編寫測試代碼

def func(x): return x + 1 def test_answer(): assert func(3) == 5 

第三步,執行測試代碼。

  •   找到pytest安裝路徑。
  • 用其所在的解析器(python.exe)執行test.py ,執行命令比如:

執行的結果如下圖所示:

2.4 Nose

Nose是對unittest的擴展,使得python的測試更加簡單。nose自動發現測試代碼並執行,nose提供了大量的插件,比如測試輸出的xUnitcompatible,覆蓋報表等等。

nose的詳細文檔: https://nose.readthedocs.org/en/latest/

注意:nose本身是支持python3的,但是很多它的插件不支持。

2.5 tox

最大的特色,是自動最測試環境的管理以及使用多個解析器配置進行測試。

tox的詳細文檔: http://testrun.org/tox/latest/

2.6  Unittest2

是unitest的升級版。對API進行了改善以及更好的診斷語法。

unittest2的詳細文檔: https://pypi.python.org/pypi/unittest2

首先,安裝

pip install unittest2

為了以后能在unittest與unittest2之間進行切換,最好的代碼編寫方式如下:

import unittest2 as unittest  class MyTest(unittest.TestCase): ... 

2.7 mock unittest.mock是用來測試python的庫。在python3.3版本以后,這個是一個標准庫。 對老版本來說,使用pip install mock 進行安裝。

mock的精髓在於,你可以使用模擬的對象來替代你的系統的一部分,然后驗證后續的執行是否正確。
mock的詳細文檔:http://www.voidspace.org.uk/python/mock/


免責聲明!

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



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