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中的內容也可以是如下:
執行之,看到返回了True或False:import nose result = nose.run() print result
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測試。