簡介
我們在寫用例的時候,單個腳本的用例好執行,那么多個腳本的時候,如何批量執行呢?這時候就需要用到 unittest 里面的 discover 方法來加載用例了。加載用例后,用 unittest 里面的 TextTestRunner 這里類的 run 方法去一次執行多個腳
本的用例。那么前邊介紹那么多都是半道開始,半道出家,這篇就帶大家從頭到尾,一步一步給小伙伴們詳細介紹一下。
新建測試項目
1、pycharm 左上角 File>New Projetc>Pure Python,在 location 位置命名一個測試工程的名稱:honggetest
2、然后點擊“Create”
3、選中剛才新建的工程右鍵>New>Python Package>新建一個 case 文件夾
4、重復第 3 步的操作,新建一個 case 的文件夾,在里面添加一個 baidu 和一個 blog 的文件夾,里面分別有兩個用例的腳本,如下圖所示。test_01,test_02,test_03,test_04 是我們寫用例的腳本
5、test_01創建完后,打開腳本,寫入用例,其他的可以復制即可
6、參考代碼
1 # coding:utf-8 2 import unittest 3 import time 4 5 class Test(unittest.TestCase): 6 def setUp(self): 7 print ("start!") 8 def tearDown(self): 9 time.sleep(1) 10 print ("end!") 11 def test01(self): 12 print ("執行測試用例 01") 13 def test02(self): 14 print ("執行測試用例 02") 15 def test03(self): 16 print ("執行測試用例 03") 17 18 if __name__ == "__main__": 19 unittest.main()
7、在 honggetest 這個項目下面創建一個腳本 run_all_case.py,接下來用這個腳本去批量執行所有的用例。
discover 加載測試用例
1、discover 方法里面有三個參數:
-case_dir:這個是待執行用例的目錄。
-pattern:這個是匹配腳本名稱的規則,test*.py 意思是匹配 test 開頭的所有腳本。
-top_level_dir:這個是頂層目錄的名稱,一般默認等於 None 就行了。
2、discover 加載到的用例是一個 list 集合,需要重新寫入到一個 list 對象 testcase 里,這樣就可以用 unittest 里面的 TextTestRunner 這里類的 run 方法去執行。
3、運行后結果入下,就是加載到的所有測試用例了:
參考代碼
1 # coding=utf-8 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。 5 ''' 6 Created on 2019-4-29 7 @author: 北京-宏哥 8 Project:學習和使用discover批量執行測試用例 9 ''' 10 #3.導入unittest模塊 11 import unittest 12 #4.編寫測試用例和斷言 13 def all_case(): 14 # 待執行用例的目錄 15 case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case" 16 testcase = unittest.TestSuite() 17 discover = unittest.defaultTestLoader.discover(case_dir, 18 pattern="test*.py", 19 top_level_dir=None) 20 #discover方法篩選出用例,循環添加到測試套件中 21 for test_suit in discover: 22 for test_case in test_suit: 23 #添加用力到testcase 24 testcase.addTests(test_case) 25 print(testcase) 26 return testcase 27 if __name__ == "__main__": 28 # 返回實例 29 runner = unittest.TextTestRunner() 30 # run 所有用例 31 runner.run(all_case())
run 測試用例
1、為了更方便的理解,可以把上面 discover 加載用例的方法封裝下,寫成一個函數
2、先返回 TextTestRunner()類的實例
3、調用 run 方法去執行 all_case()這個函數
參考代碼
# coding=utf-8 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 #2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-4-29 @author: 北京-宏哥 Project:學習和使用discover批量執行測試用例 ''' #3.導入unittest模塊 import unittest #4.編寫測試用例和斷言 def all_case(): # 待執行用例的目錄 case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case" testcase = unittest.TestSuite() discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None) testcase.addTests(discover) # 直接加載 discover 可以兼容python2和3 print(testcase) return testcase if __name__ == "__main__": # 返回實例 runner = unittest.TextTestRunner() # run 所有用例 runner.run(all_case())
小結
1、unittest模塊中的TestLoader類有一個discover方法(Python2.7之后)discover(start_dir, pattern='test*.py',top_level_dir=None)遞歸查找指定目錄(start_dir)及其子目錄下的全部測試模塊,將這些測試模塊放入一個TestSuite 對象並返
回。只有匹配pattern的測試文件才會被加載到TestSuite中。如果一個測試文件的名稱符合pattern,將檢查該文件是否包含 load_tests() 函數,如果 load_tests() 函數存在,則由該函數負責加載本文件中的測試用例。如果不存在,就會執行
loadTestsFromModule(),查找該文件中派生自TestCase 的類包含的 test 開頭的方法。
1 case_dir = os.path.join(os.getcwd(), "case")