python接口自動化(二十六)--批量執行用例 discover(詳解)


簡介 

  我們在寫用例的時候,單個腳本的用例好執行,那么多個腳本的時候,如何批量執行呢?這時候就需要用到 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_dirpattern='test*.py',top_level_dir=None)遞歸查找指定目錄(start_dir)及其子目錄下的全部測試模塊,將這些測試模塊放入一個TestSuite 對象並返

回。只有匹配pattern的測試文件才會被加載到TestSuite中。如果一個測試文件的名稱符合pattern,將檢查該文件是否包含 load_tests() 函數,如果 load_tests() 函數存在,則由該函數負責加載本文件中的測試用例。如果不存在,就會執行

loadTestsFromModule(),查找該文件中派生自TestCase 的類包含的 test 開頭的方法。

2、用例路徑另一種寫法
1 case_dir = os.path.join(os.getcwd(), "case")

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM