nosetest
- Offical site
nose继承自unittest,且比unittest更容易使用。
由於nose是自動收集測試用例的,只有nose執行的測試目錄下的原始程式碼檔、包名、子目錄名跟規則運算式匹配成功後,才能被收集。而且代碼是樹級層次顯示的話,nose會逐級向下查找子目錄下的匹配的測試用例。
- 配的規則運算式預設值為
:((?:^|[\\b_\\.-])[Tt]est.
所以最好是以Test開頭,或者test開頭。當然也可以修改默認的匹配的規則運算式。 - 因此建議為project單獨建一個test package,裡面按專案模組分子包,最後以及為 “test_”開頭的測試用例原始檔案。
- 配的規則運算式預設值為
簡單的測試
- 把檔案保存到一個目錄下,然後在該目錄下在命令列裡執行nosetests就可以運行測試了。
=======================
#### file: test.py ####
=======================
def Testfunc():
a = 1
b = 2
assert a == b
- 模組的setUp和tearDown
- nose在檔中如果找到函數setup, setup_module, setUp 或者setUpModule等,那麼會在該模組的所有測試執行之前執行該函數。
- 如果找到函數 teardown,tearDown, teardown_module或者 tearDownModule 等,那麼會在該模組所有的測試執行完之後執行該函數。
- 對於以下的的代碼,nose實際的執行過程是這樣的:setUp()->Testfunc1()->Testfunc2()->tearDown()
def setUp():
print "function setup"
def tearDown():
print "function teardown"
def Testfunc1():
print "Testfunc1"
assert True
def Testfunc2():
print "Testfunc2"
assert True
- 測試函數的setUp和tearDown
- 可能會想給每個函數單獨指定類似的setUp和tearDown函數,可以如下處理
- nose對代碼的具體執行順序如下: setUp()->func1Start()->Testfunc1()->func1End()->func2Start()->Testfunc2()->func2End()->tearDown()
def setUp():
print "function setup"
def tearDown():
print "function teardown"
def func1Start():
print "func1 start"
def func1End():
print "func1 end"
def func2Start():
print "func2 start"
def func2End():
print "func2 end"
def Testfunc1():
print "Testfunc1"
assert True
def Testfunc2():
print "Testfunc2"
assert True
# 指定方法1
Testfunc1.setup = func1Start
Testfunc1.tearDown = func1End
Testfunc2.setup = func2Start
Testfunc2.tearDown = func2End
# 指定方法2
@with_setup(func1Start, func1End)
def Testfunc1():
print "Testfunc1"
assert True
@with_setup(func2Start, func2End)
def Testfunc2():
print "Testfunc2"
assert True
測試類的的setUp和tearDown
- 這裡nose會對每個類的測試方法單獨創建類的實例,並且有單獨的setUp和tearDown。nose測試的順序如下
- setUp()->Testfunc1()->TearDown()->setUp()->Testfunc2()->TearDown()
class TestClass():
arr1 = 2
arr2 = 2
def setUp(self):
self.arr1 = 1
self.arr2 = 3
print "MyTestClass setup"
def tearDown(self):
print "MyTestClass teardown"
def Testfunc1(self):
assert self.arr1 == self.arr2
def Testfunc2(self):
assert self.arr1 == 2
package的setUp和tearDown
- package的setUp和tearDown方法需要放在init.py這個檔中,整個package只執行一次setUp和一次tearDown。