1. 程式人生 > >python測試工具--nose簡介

python測試工具--nose簡介

宣告:

本部落格歡迎轉發,但請保留原作者資訊!

新浪微博:@孔令賢HW

內容系本人學習、研究和總結,如有雷同,實屬榮幸!


使用python開發的估計都知道unittest,與Java中的JUnit一樣,編寫測試用例需要遵守一定的規則。而nose繼承自unittest,且比unittest更容易使用。

1、安裝

同其他python第三方元件一樣,你可以盡情使用easy_install或pip,甚至是setuptools(但前提是你已經安裝了它們):

easy_install nose,或者

pip install nose,或者

python setup.py install

安裝後,nosetests就在你的python安裝目錄下的Scripts目錄中。然後,你就可以使用nose了,就這麼簡單。

2、使用

舉例說明,比如我有一個這樣的目錄:


先不管那個main.py,那個test目錄下有一個test.py檔案,內容如下,注意,這裡沒有unittest的任何影子:

def Testfunc():
    a = 1
    b = 2
    assert a == b

在D:\Temp\test目錄中進入命令列,執行nosetests:


一切都是自動發現和執行。

當然也可以編碼實現測試用例的執行,剛才那個main.py內容如下:

import nose
nose.main()

執行之,看到返回結果是一樣的:


或者,main.py中的內容也可以是如下:

import nose
result = nose.run()
print result
執行之,看到返回了True或False:


3、說明

nose會自動識別原始檔,目錄或包中的測試用例。任何符合正則表示式:

(?:^|[b_.-])[Tt]est

的類、函式、檔案或目錄,以及TestCase的子類都會被識別並執行。

當然,可以顯式的指定檔案、模組或函式:

nosetests only_test_this.py
nosetests test.module
nosetests another.test:TestCase.test_method
nosetests a.test:TestCase
nosetests /path/to/test/file.py:test_function

如果一個物件包含了__test__屬性,如果值不是True,該物件(以及它包含的所有物件)不會被nose發現

之前在nosetests引數選項中的-w,現在已經廢棄,就是說,可以在nosetests的引數中直接指定多個目錄,以空格分隔。

在測試用例中可以使用assert或raise

同JUnit一樣,nose支援setup和teardown函式,在測試用例的前後執行。四種作用域:
1、package。可以在__init__.py中定義,setup方法名可以是setup, setup_package, setUp, or setUpPackage,而teardown方法名可以是teardown, teardown_package, tearDown or tearDownPackage。比如定義資料庫的連線和釋放。
2、module。在模組內定義setup,setup_module, setUp or setUpModule,和/或teardown,teardown_module, or tearDownModule。
3、class。
4、function。任何符合正則的函式都會被包裝成FunctionTestCase,最簡單的失敗和成功的用例如下:

def test():
    assert False
def test():
    pass
對於方法來說,最簡單的setup和teardown是使用裝飾器:
def setup_func():
    "set up test fixtures"

def teardown_func():
    "tear down test fixtures"

@with_setup(setup_func, teardown_func)
def test():
    "test ..."

nose可以與setuptools無縫整合,在setup配置檔案中:

setup (
    #...
   test_suite = 'nose.collector'
)

然後使用python setup.py test或python setup.py nosetests測試。