Python幾種經常使用的測試框架

1、測試的經常使用規則

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

2、常見的測試框架

2.1 Unittest

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

   經過繼承unittest.TestCase來建立一個測試用例。python

  具體請參考文檔數據結構

  舉個例:框架

import unittest

def fun(x):
    return x + 1

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

執行後成功。函數

可是,若是將指望的結果改爲5,則執行的結果以下圖所示:工具

 

image

 

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()

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

image

     可是,若是咱們把結果改一下,square(2)的結果改爲5,測試代碼以下:.net

def square(x):
    """Squares x.

    >>> square(2)
    5
    >>> square(-2)
    4
    >>> square(5)
    25
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod()

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

image

 

     

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 ,執行命令好比:

image

 

  執行的結果以下圖所示:

image

 

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 mockunittest.mock是用來測試python的庫。在python3.3版本之後,這個是一個標準庫。 對老版原本說,使用pip install mock 進行安裝。

   mock的精髓在於,你可使用模擬的對象來替代你的系統的一部分,而後驗證後續的執行是否正確。
   mock的詳細文檔:http://www.voidspace.org.uk/python/mock/    
 
  下一篇咱們重點講講nose的使用方法。
相關文章
相關標籤/搜索