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

簡介 

  咱們在寫用例的時候,單個腳本的用例好執行,那麼多個腳本的時候,如何批量執行呢?這時候就須要用到 unittest 裏面的 discover 方法來加載用例了。加載用例後,用 unittest 裏面的 TextTestRunner 這裏類的 run 方法去一次執行多個腳python

本的用例。那麼前邊介紹那麼多都是半道開始,半道出家,這篇就帶你們從頭至尾,一步一步給小夥伴們詳細介紹一下。bash

新建測試項目

一、pycharm 左上角 File>New Projetc>Pure Python,在 location 位置命名一個測試工程的名稱:honggetest微信

二、而後點擊「Create」函數

三、選中剛纔新建的工程右鍵>New>Python Package>新建一個 case 文件夾學習

四、重複第 3 步的操做,新建一個 case 的文件夾,在裏面添加一個 baidu 和一個 blog 的文件夾,裏面分別有兩個用例的腳本,以下圖所示。test_01,test_02,test_03,test_04 是咱們寫用例的腳本測試

五、test_01建立完後,打開腳本,寫入用例,其餘的能夠複製便可ui

六、參考代碼編碼

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()複製代碼

七、在 honggetest 這個項目下面建立一個腳本 run_all_case.py,接下來用這個腳本去批量執行全部的用例。spa

discover 加載測試用例

一、discover 方法裏面有三個參數:3d

  -case_dir:這個是待執行用例的目錄。

  -pattern:這個是匹配腳本名稱的規則,test*.py 意思是匹配 test 開頭的全部腳本。

  -top_level_dir:這個是頂層目錄的名稱,通常默認等於 None 就好了。

二、discover 加載到的用例是一個 list 集合,須要從新寫入到一個 list 對象 testcase 裏,這樣就能夠用 unittest 裏面的 TextTestRunner 這裏類的 run 方法去執行。

三、運行後結果入下,就是加載到的全部測試用例了:

參考代碼

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 測試用例

一、爲了更方便的理解,能夠把上面 discover 加載用例的方法封裝下,寫成一個函數

二、先返回 TextTestRunner()類的實例

三、調用 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())複製代碼

小結

一、

unittest模塊中的TestLoader類有一個discover方法(Python2.7以後)
discover(
s
tart_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")
     爲了方便你們在移動端也能看到我分享的博文,現已註冊我的微信公衆號,掃描左下方二維碼便可,歡迎你們關注,有時間會及時分享相關技術博文。    爲了方便你們互動討論相關技術問題,現已組建專門的微信羣,因爲微信羣滿100,請您掃描右下方宏哥我的微信二維碼拉你進羣(請務必備註:已關注公衆號進羣),歡迎你們加入這個你們庭,咱們一塊兒暢遊知識的海洋。    感謝您花時間閱讀此篇文章,若是您以爲這篇文章你學到了東西也是爲了犒勞下博主的碼字不易不妨打賞一下吧,讓博主能喝上一杯咖啡,在此謝過了!    若是您以爲閱讀本文對您有幫助,請點一下左下角「推薦」按鈕,您的「推薦」將是我最大的寫做動力!另外您也能夠選擇【關注我】,能夠很方便找到我!    本文版權歸做者和博客園共有,來源網址:https://www.cnblogs.com/du-hong 歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利! 
複製代碼
相關文章
相關標籤/搜索