#unittest單元測試框架,主要由四部分組成:測試固件、測試用例、測試套件、測試執行器 #1、測試固件:
'''def setUp(self): # 每條用例執行前都要執行,例如測試前的准備工作 print('setup') def tearDown(self): # 每條用例執行后都要執行,例如測試執行完成后的清除配置工作 print('tearDown') '''
#例如:
1 import unittest 2 3 def calc(a,b): 4 return a+b 5 6 class CalcTest(unittest.TestCase): 7 def setUp(self):#每條用例執行前都要執行 8 print('setup') 9 10 def tearDown(self):#每條用例執行后都要執行 11 print('tearDown') 12 13 def test_pass(self): 14 print('aaaa') 15 result = calc(1,2) 16 self.assertEqual(3,result) 17 18 def test_fail(self): 19 print('bbbb') 20 result = calc(1,0) 21 self.assertEqual(2,result,'什么時候出msg') 22 23 def test_a(self): 24 print('cccc') 25 unittest.main()
》執行結果:
setup
cccc
tearDown
setup
bbbb
tearDown
setup
aaaa
tearDown
''' 很多時候我們只想執行一次測試固件:比如setUp()中放着連接數據庫操作, 多個test case放着不同數據庫操作,然后tearDown()斷開數據連接, 使用setUpClass()和tearDownClass()可以的得到這樣的效果 @classmethod def setUpClass(cls): print('setupClass') @classmethod def tearDownClass(cls): print('teardownClass') '''
1 import unittest 2 3 def calc(a,b): 4 return a+b 5 6 class CalcTest(unittest.TestCase): 7 @classmethod 8 def setUpClass(cls): 9 print('setupClass') 10 11 @classmethod 12 def tearDownClass(cls): 13 print('teardownClass') 14 15 def test_pass(self): 16 print('aaaa') 17 # result = calc(1,2) 18 # self.assertEqual(3,result) 19 20 def test_fail(self): 21 print('bbbb') 22 # result = calc(1,0) 23 # self.assertEqual(2,result,'什么時候出msg') 24 25 def test_a(self): 26 print('cccc') 27 unittest.main()
執行結果:
》
setupClass
cccc
bbbb
aaaa
teardownClass
1 #測試用例 2 #測試用例中,包含測試固件,測試固件可以不寫,但是至少要有一個以test開頭的函數。 3 #unittest會自動識別test開頭的函數是測試代碼,一定要用小寫的test開頭! 4 #測試用例執行順序是以test后面的字母順序執行的。例如下面的例子執行順序是test_a,test_fail,test_pas
#測試執行器 test runner用來執行加載的測試用例,可以是單個測試用例,也可以是測試套件 一種就是上方實例中的直接使用unittest.main()去執行,會搜索所有以test開頭的測試用例,按照ASCII的順序執行多個用例 另一種就是使用TextTestRunner()方法初始化一個測試執行器,然后使用run()去執行測試套件
1 suite = unittest.TestSuite(unittest.makeSuite(CalcTest)) 2 runner = unittest.TextTestRunner() 3 runner.run(suite)
4 這里suite是指測試套件的實例
使用makeSuite()可以把一個類下面所有測試方法都加載到測試套件中
#測試套件
很多測試用例的集合就是測試套件,通過測試套件來管理多個測試用例,會根據用例的加載順序執行用例
使用TestSuite()初始化一個Suite實例
使用addTest()方法加載測試方法到測試套件中,addTest()如果要在傳入別的包下的測試方法: 包名.類名(測試方法函數)
1 suite = unittest.TestSuite() 2 suite.addTest(CalcTest('test_fail')) 3 suite.addTest(CalcTest('test_a')) 4 runner = unittest.TextTestRunner() 5 runner.run(suite)
1 將以上代碼替換unittest.main(),也可以執行