自動化測試過程當中,自動化覆蓋的功能點和對應測試用例之間的關係基本都是1 VS N,若是每次將測試用例一個個單獨執行,不只效率很低,html
沒法快速反饋測試結果,並且維護起來很麻煩。在python的單元測試框架unittest中,提供了批量執行的測試用例的方法。python
這篇博客,介紹下unittest框架的經常使用類和方法,以及利用discover()方法批量執行測試用例的方法。。。框架
官方文檔:unittest單元測試框架函數
1、unittest框架單元測試
首先介紹一下unittest框架和執行測試用例相關的幾個模塊:測試
一、TestCase()類ui
TestCase類的實例表示unittest中的邏輯測試單元,此類旨在用做基類,具體測試由具體的子類實現。該類實現了測試運行器所需的接口,以容許它驅動測試,spa
以及測試代碼可用於檢查和報告各類故障的方法。每一個實例都將運行unittest的一個名爲methodName的基本方法。3d
二、setUp()方法code
該方法的主要做用是用來初始化測試環境,它在測試用例執行以前當即調用,除了AssertionError或SkipTest,經過該方法產生的任何異常都將被認爲是錯誤的。
只有測試成功執行,纔會被調用,默認什麼都不作。
三、tearDown()方法
該方法的主要做用是在測試用例執行完畢後記錄測試結果並恢復測試環境,即便出現異常,也會調用此方法。
四、run()方法
該方法的做用是運行測試用例,將測試結果收集到TestResult中做爲傳遞的對象。
若是省略結果或者用None建立臨時結果對象(經過調用defaultTestResult()方法),結果對象會返回給run()的調用者。
五、defaultTestResult()方法
該方法返回應該用於此測試用例類的測試結果做爲實例(若是沒有其餘結果,實例應返回給run()方法)。
六、TestSuite()類
該類表明單個測試用例和測試套件的集合。它提供了運行測試所需的接口以使其能夠像其餘測試同樣運行。TestSuite實例和遍歷套件相同,單獨運行每一個測試用例。
TestSuite的行爲和TestCase很是類似,但它並未實際執行測試,而是用於將測試用例聚合到一塊兒,下面的2個方法用於向TestSuite實例中添加測試用例:
addTest():添加測試用例到TestCase或TestSuite套件中;
addTests():將迭代TestCase和TestSuite實例中的全部測試用例添加到此測試組件,至關於調用addTest()的每一個元素。
七、TestLoader()類
所述TestLoader類被用來建立類和模塊的測試套件。一般不須要建立該類的實例。unittest框架提供了一個能夠共享的實例unittest.defaultTestLoader。
八、discover()方法
discover(start_dir, pattern ='test *.py', top_level_dir = None )
start_dir:要測試的模塊名或測試用例目錄;
pattern='test*.py':表示用例文件名的匹配原則,下面的例子中匹配文件名爲以「test」開頭的「.py」文件,星號「*」表示任意多個字符;
top_level_dir=None:測試模塊的頂層目錄,若是沒有頂層目錄,默認爲None;
該方法經過從指定的開始目錄遞歸到子目錄中查找全部測試模塊,並返回包含它們的TestSuite對象,只有與模式匹配測試文件和可導入的模塊名稱纔會被加載。
全部測試模塊必須能夠從項目的頂層導入,若是起始目錄不是頂層目錄,則頂層目錄必須單獨指定。
若是一個測試文件的名稱符合pattern,將檢查該文件是否包含 load_tests() 函數,若是 load_tests() 函數存在,則由該函數負責加載本文件中的測試用例。
若是不存在,就會執行loadTestsFromModule(),查找該文件中派生自TestCase 的類包含的 test 開頭的方法。
九、TestResult()類
該類用於記錄哪些測試成功或失敗的信息。一個TestResult對象存儲一組測試的結果,在TestCase和TestSuite中保證結果正確記錄。
測試框架unittest
須要訪問TestResult做爲報告目的運行一組測試所生成的對象,爲此目的TestResult和TestRunner.run()
方法返回一個實例 。
2、addTest()實例
舉個例子來講,若是測試用例有下面這些:
使用addTest()方法執行測試用例,示例代碼以下:
# coding=utf-8
import unittest # 加載測試用例
import test_user import test_mobile import test_mobcode import test_txtcode import test_pwd import test_signup import test_login import test_vipcenter import test_search # 將測試用例添加到測試集合
suite = unittest.TestSuite() suite.addTest(test_user.UserTest("test_user")) # 用戶名
suite.addTest(test_mobile.MobileTest("test_mobile")) # 手機號碼
suite.addTest(test_mobcode.MobCodeTest("test_mobcode")) # 手機驗證碼
suite.addTest(test_txtcode.TxtCodeTest("test_txtcode")) # 圖形驗證碼
suite.addTest(test_pwd.PasswordTest("test_pwd")) # 密碼
suite.addTest(test_signup.SignUpTest("test_signup")) # 註冊功能
suite.addTest(test_login.LoginTest("test_loggin")) # 登陸功能
suite.addTest(test_vipcenter.VipTest("test_vip")) # 會員中心
suite.addTest(test_search.SearchTest("test_search")) # 搜索功能
# 運行測試用例
runner = unittest.TextTestRunner() runner.run(suite)
能夠看出須要進行不少的用例導入和添加操做,若是用例成百上千條,那麼這將是一場災難!!!
3、discover()使用實例
仍是上面的那些測試用例,此次使用discover()方法批量執行用例,示例代碼以下:
# coding=utf-8
import unittest from unittest import defaultTestLoader # 測試用例存放路徑
case_path = './Testcase/case'
# 獲取全部測試用例
def get_allcase(): discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py") suite = unittest.TestSuite() suite.addTest(discover) return suite if __name__ == '__main__': # 運行測試用例
runner = unittest.TextTestRunner() runner.run(get_allcase())
相比於addTest()方法,discover()方法更方便高效,也能夠提升測試反饋速率。
PS:使用discover()方法,切記測試用例中須要執行的測試方法必須以test開頭,不然沒法加載!!!
以上就是關於unittest框架的一些經常使用類和方法的介紹,以及批量執行測試用例的2種方法,僅供參考。。。