unittest是單元測試的一個框架html
在說unittest以前,先說幾個概念:python
TestCase 也就是測試用例框架
TestSuite 多個測試用例集合在一塊兒,就是TestSuite單元測試
TestLoader是用來加載TestCase到TestSuite中的測試
TestRunner是來執行測試用例的,測試的結果會保存到TestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息ui
在寫代碼前,須要把兩個文件拷貝到libraries中:HTMLTestRunner.py 和BeautifulReport.zip解壓後的文件spa
接下來開始寫代碼code
import unittest class MyTest(unittest.TestCase):#繼承unittest.TestCase def tearDown(self): #每一個測試用例執行以後操做 print("teardown1111") def setUp(self): #每一個測試用例執行以前操做 print("setup2222") def test_run01(self): # 測試用例 self.assertEqual(1,1) def test_run02(self): self.assertIn('a', 'mapeipei') if __name__=='__main__': unittest.main()#運行全部的用例
下面是一些經常使用的斷言xml
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(這個模塊須要本身安裝!)來生成測試報告:htm
import unittest import HTMLTestRunner class MyTest(unittest.TestCase):#繼承unittest.TestCase def tearDown(self): #每一個測試用例執行以後操做 print("teardown1111") def setUp(self): #每一個測試用例執行以前操做 print("setup2222") def test_run01(self): # 測試用例 self.assertEqual(1,1) def test_run02(self): self.assertIn('a', 'mapeipei') def test_run03(self): self.assertEqual(2,2) if __name__=='__main__': testsuit = unittest.TestSuite()#建立一個測試集合 # testsuit.addTest(MyTest('test_run01'))#往測試套件中單個添加測試用例 testsuit.addTest(unittest.makeSuite(MyTest)) #添加MyTets類下的全部用例 f = open('res.html','wb')#打開一個保存結果的html文件 runner = HTMLTestRunner.HTMLTestRunner(stream=f,title='測試報告',description='測試狀況') #生成執行用例的對象 runner.run(testsuit) #執行測試套件
假如咱們有不少測試用例的py文件,都放在某個目錄下,這時候須要把該目錄下的測試用例所有執行,可使用unittest.defaultTestLoader.discover
import unittest import HTMLTestRunner suite = unittest.TestSuite()#建立測試套件 all_case = unittest.defaultTestLoader.discover(u'E:\\testpy\\python-mpp\\練習\\0618練習\\case','test_*.py') #找到某個目錄下全部已test開始的py文件裏面的測試用例 for case in all_case: suite.addTests(case)#把全部的用例添加進來 fp = open('res02.html','wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='全部測試狀況') runner.run(suite)
上述產生的測試報告是html格式的,jenkins沒法識別,顯示不出來,那我們就要產生一些Jenkins認識的測試報告,Jenkins認識xml格式的報告,那我們就產生xml格式的唄,就須要用一個新的模塊,xmlrunner,安裝直接 pip install xmlrunner便可,代碼以下:
if __name__=='__main__': testsuit = unittest.TestSuite()#建立一個測試集合 # testsuit.addTest(MyTest('test_run01'))#往測試套件中單個添加測試用例 testsuit.addTest(unittest.makeSuite(MyTest)) #添加MyTets類下的全部用例 runner = xmlrunner.XMLTestRunner(output='report')#指定報告存放的目錄 runner.run(testsuit) #執行測試套件