轉:https://blog.csdn.net/aff60756/article/details/101998966
在說unittest之前,先說幾個概念:
TestCase 也就是測試用例
TestSuite 多個測試用例集合在一起,就是TestSuite
TestLoader是用來加載TestCase到TestSuite中的
TestRunner是來執行測試用例的,測試的結果會保存到TestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息
1.單元測試:
開發自己測自己寫的代碼;
2.導入模塊unittest:
import unittest #導入unittest模塊
from BeautifulReport import BeautifulReport #導入BeautifulReport 報告模板模塊
3.運行一個簡單的unittest:
主要是體會一下unittest的寫法
1 import unittest #單元測試模塊 2 3 class TestCalc(unittest.TestCase): 4 def test1(self): #函數名要以test開頭,否則不會被執行 5 self.assertEqual(1,1) 6 7 def test2(self): 8 self.assertEqual(1,2) 9 10 unittest.main() #會運行當前python文件里面的所有測試用例
4.unittest單元測試的基本流程:
用例集/測試套件:存放測試用例的
①.先把所有的測試用例都放到用例集
②.運行這些測試用例
③.產生報告
suite方式組織測試用例1:
1 import unittest #單元測試模塊 2 from BeautifulReport import BeautifulReport as bf #導入BeautifulReport模塊 3 4 class TestCalc(unittest.TestCase): 5 def setUp(self): #每個用例運行之前運行的 6 print('setup是啥時候運行的') 7 8 def tearDown(self): #每個用例運行之后運行的 9 print('teardown是啥時候運行的') 10 11 @classmethod 12 def setUpClass(cls): #在所有用例執行之前運行的 13 print('我是setUpclass,我位於所有用例的開始') 14 15 @classmethod 16 def tearDownClass(cls): #在所有用例都執行完之后運行的 17 print('我是tearDownClass,我位於多有用例運行的結束') 18 19 def testcc(self): #函數名要以test開頭,否則不會被執行 20 '''這是第一個測試用例''' #用例描述,在函數下,用三個單引號里面寫用例描述 21 self.assertEqual(1,1) 22 print('第一個用例') 23 24 def testaa(self): 25 '''這個是第二個測試用例''' 26 self.assertEqual(1,1) 27 print('第二個用例') 28 29 def testdd(self): 30 '''用例描述3''' 31 print('第三個用例') 32 33 def testbb(self): 34 '''用例描述4''' 35 print('第四個用例') 36 37 suite = unittest.TestSuite() #定義一個測試集合 38 suite.addTest(unittest.makeSuite(TestCalc)) #把寫的用例加進來(將TestCalc類)加進來 39 run = bf(suite) #實例化BeautifulReport模塊 40 run.report(filename='test',description='這個描述參數是必填的')
使用discover方式組織測試用例:
使用場景:
運行指定目錄下的全部測試用例
1 import unittest 2 from BeautifulReport import BeautifulReport #導入BeautifulReport 3 4 if __name__ == '__main__': 5 suite_tests = unittest.defaultTestLoader.discover(".",pattern="*tests.py",top_level_dir=None) #"."表示當前目錄,"*tests.py"匹配當前目錄下所有tests.py結尾的用例 6 BeautifulReport(suite_tests).report(filename='百度測試報告', description='搜索測試', log_path='.') #log_path='.'把report放到當前目錄下
運行指定測試類中的case,suite方式組織測試用例:
使用場景:
假如有測試類AB,類中各有測試方法1,2,3
假如想僅運行測試類A中方法1,測試類B中的方法3,可以使用這種方式組織測試用例
主要是為了在case量很大時,很方便的調試
1 import unittest 2 import os 3 from BeautifulReport import BeautifulReport as bf 4 from case.subway.test_subway import Subway 5 6 #僅運行指定的case Subway是類名,test_subway_001是類中的測試方法名 7 caseList=[Subway("test_subway_001")] 8 #使用suite組織測試用例 9 suite = unittest.TestSuite() 10 suite.addTests(caseList) 11 #運行並生成測試報告 12 run = bf(suite) 13 run.report(filename="test", description="測試報告")