参考:http://blog.csdn.net/linda1000/article/details/8533349
1、模块的setUp和tearDown
1 def setUp(): 2 print "function setup" 3 4 def tearDown(): 5 print "function teardown" 6 7 def Testfunc1(): 8 print "Testfunc1" 9 assert True 10 11 def Testfunc2(): 12 print "Testfunc2" 13 assert True
nose在文件中如果找到函数setup, setup_module, setUp 或者setUpModule等,那么会在该模块的所有测试执行之前执行该函数。如果找到函数 teardown,tearDown, teardown_module或者 tearDownModule 等,那么会在该模块所有的测试执行完之后执行该函数。
对于上面的代码,nose实际的执行过程是这样的:
setUp()->Testfunc1()->Testfunc2()->tearDown()
2、测试函数的setUp和tearDown 可能会想给每个函数单独指定类似的setUp和tearDown函数,可以如
1 def setUp(): 2 print "function setup" 3 4 def tearDown(): 5 print "function teardown" 6 7 def func1Start(): 8 print "func1 start" 9 10 def func1End(): 11 print "func1 end" 12 13 def func2Start(): 14 print "func2 start" 15 16 def func2End(): 17 print "func2 end" 18 19 def Testfunc1(): 20 print "Testfunc1" 21 assert True 22 23 def Testfunc2(): 24 print "Testfunc2" 25 assert True 26 27 Testfunc1.setup = func1Start 28 Testfunc1.tearDown = func1End 29 Testfunc2.setup = func2Start 30 Testfunc2.tearDown = func2End
注意最后面的四行,分别指定了Testfunc1和Testfun2的setup和teardown函数。
nose对上面代码的具体执行顺序如下:
setUp()->func1Start()->Testfunc1()->func1End()->func2Start()->Testfunc2()->func2End()->tearDown()
3、测试类的的setUp和tearDown
看如下的代码:
1 class TestClass(): 2 arr1 = 2 3 arr2 = 2 4 5 def setUp(self): 6 self.arr1 = 1 7 self.arr2 = 3 8 print "MyTestClass setup" 9 10 def tearDown(self): 11 print "MyTestClass teardown" 12 13 def Testfunc1(self): 14 assert self.arr1 == self.arr2 15 16 def Testfunc2(self): 17 assert self.arr1 == 2
这里nose会对每个类的测试方法单独创建类的实例,并且有单独的setUp和tearDown。nose对上面测试的顺序如下:
setUp()->Testfunc1()->TearDown()->setUp()->Testfunc2()->TearDown()
4、package的setUp和tearDown
package的setUp和tearDown方法需要放在__init__.py这个文件中,整个package只执行一次setUp和一次tearDown。
可以在__init__.py中定义,setup方法名可以是setup, setup_package, setUp, or setUpPackage,而teardown方法名可以是teardown, teardown_package, tearDown or tearDownPackage。比如定义数据库的连接和释放。