標籤:tps als 單元 str default lan 必須 技術分享 add
Python內建一個單元測試架構,unittest模組,用它來做單元測試,它裡面封裝好了一些校正返回結果的方法和一些用例執行前的初始化操作
在說unittest之前,先說幾個概念:
TestCase:測試案例
TestSuite:多個測試案例集合在一起
TestLoader:用來載入TestCase到TestSuite
TestRunner:執行測試案例,測試的結果儲存到TestResult執行個體中,包括運行了多少測試案例,成功了多少,失敗了多少等資訊
import unittestclass MyTest(unittest.TestCase): # 繼承unittest.TestCase def tearDown(self): # 每個測試案例執行之後做操作 print(‘111‘) def setUp(self): # 每個測試案例執行之前做操作 print(‘22222‘) @classmethod def tearDownClass(self): # 必須使用 @ classmethod裝飾器, 所有test運行完後運行一次 print(‘4444444‘) @classmethod def setUpClass(self): # 必須使用@classmethod 裝飾器,所有test運行前運行一次 print(‘33333‘) def test_a_run(self): self.assertEqual(1, 1) # 測試案例 def test_b_run(self): self.assertEqual(2, 2) # 測試案例 if __name__ == ‘__main__‘: unittest.main()#運行所有的測試案例
下面是一些常用的斷言,也就是校正結果
assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is True assertFalse(x) bool(x) is False assertIsNone(x) x is None assertIsNotNone(x) x is not None assertIn(a, b) a in b assertNotIn(a, b) a not in b
HTMLTestRunner模組,可以產生測試報告,這個模組需要自己安裝,使用執行測試案例就會產生一個HTML的測試報告,裡面會有每個測試案例的執行結果,
import HTMLTestRunner import unittest class MyTest(unittest.TestCase):#繼承unittest.TestCase def tearDown(self): #每個測試案例執行之後做操作 print(‘111‘) def setUp(self): #每個測試案例執行之前做操作 print(22222) def test_run(self): # self.assertEqual(1,1) self.assertIs(1,1) #測試案例 def test_run2(self): # self.assertEqual(1,1) self.assertIs(1,1) #測試案例 def test_run3(self): # self.assertEqual(1,1) self.assertIs(1,1) #測試案例 def test_run1(self): # self.assertEqual(1,1) self.assertIs(1,1) #測試案例 if __name__ == ‘__main__‘: test_suite = unittest.TestSuite()#建立一個測試集合 test_suite.addTest(MyTest(‘test_run1‘))#測試套件中添加測試案例 #test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的測試方法 fp = open(‘res.html‘,‘wb‘)#開啟一個儲存結果的html檔案 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=‘api測試報告‘,description=‘測試情況‘) #產生執行用例的對象 runner.run(test_suite) #執行測試套件
如果我們有多個模組,每個模組下都寫了很多Python檔案,每個Python檔案裡面都有測試案例,那怎麼把這個目錄下的用例都執行呢,就是要先找到這個目錄下的所有Python檔案,然後找到裡面的測試案例,逐個執行
import unittest,HTMLTestRunner suite = unittest.TestSuite()#建立測試套件 all_cases = unittest.defaultTestLoader.discover(‘.‘,‘test_*.py‘) #找到某個目錄下所有的以test開頭的Python檔案裡面的測試案例 for case in all_cases: suite.addTests(case)#把所有的測試案例添加進來 fp = open(‘res.html‘,‘wb‘) runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=‘all_tests‘,description=‘所有測試情況‘) runner.run(suite) #運行測試
我們在後續進行持續整合的時候,要讓代碼自動運行,就會用到Jenkins了,但是上面產生的測試報告都是HTML格式的,Jenkins不認識,就在Jenkins裡面顯示不出來。那就要產生Jenkins認識的測試報告,Jenkins認識XML格式的報告,那就產生XML格式的報告,這就需要新的模組,xmlrunner,安裝直接pip install xmlrunner
import unittestimport xmlrunner#匯入這個模組class My(unittest.TestCase): def test1(self,a,b,c): self.assertEqual(a+b,c) if __name__==‘__main__‘: test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(My)) runner = xmlrunner.XMLTestRunner(output=‘report‘)#指定報告放的目錄 runner.run(test_suite)
運行之後,就會在report目錄產生XML格式的測試報告了,還自動添加了日期
轉載
Python模組unittest