python3+unittest單元測試框架


#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(),也可以執行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM