Python- discover()方法與執行順序補充

來源:互聯網
上載者:User

標籤:loader   簡化   技術   必須   inf   預設   啟動   路徑   bsp   

可以根據不同的功能建立不同的測試檔案,甚至是不同的測試目錄,測試檔案中還可以將不同的小功能劃分為不同的測試類別,在類下編寫測試案例,讓整體結構更加清晰

但通過addTest()添加、刪除測試案例就變得非常麻煩

TestLoader 類中提供的discover()方法可以自動識別測試案例

discover(start_dir,pattern=‘test*.py‘,top_level_dir= None)

找到指定目錄下所有測試模組,並可遞迴查到子目錄下的測試模組,只有匹配到檔案名稱時才載入

start_dir:要測試的模組名或測試案例目錄

pattern=‘test*.py‘:表示用例檔案名稱的匹配原則。此處匹配以“test”開頭的.py 類型的檔案,* 表示任意多個字元

top_level_dir= None 測試模組的頂層目錄,如果沒有頂層目錄,預設為None

執行個體1:

import unittest
test_dir = ‘./‘
#定義測試目錄為目前的目錄
discover = unittest.defaultTestLoader.discover(test_dir,pattern=‘test*.py‘)

if __name__ == ‘__main__‘:
runner = unittest.TextTestRunner()
runner.run(discover)
discover()方法會自動根據測試目錄test_dir 匹配尋找測試案例檔案,並將尋找到的測試案例組裝到測試套件中,因此,可以直接通過
run()方法執行discover,大大簡化了測試案例的尋找與執行

執行個體2:
suite = unittest.TestSuite()
all_cases = unittest.defaultTestLoader.discover(PY_PATH,‘Test*.py‘)
#discover()方法會自動根據測試目錄匹配尋找測試案例檔案(Test*.py),並將尋找到的測試案例組裝到測試套件中
[suite.addTests(case) for case in all_cases]
report_html = BeautifulReport.BeautifulReport(suite)
二、用例執行的順序
unittest 架構預設根據ASCII碼的順序載入測試用例,數字與字母的順序為:0~9,A~Z,a~z
如果要讓某個測試案例先執行,不能使用預設的main()方法,需要通過TestSuite類的addTest()方法按照一定的順序來載入

discover(start_dir,pattern=‘test*.py‘,top_level_dir=None)
找到指定目錄下所有測試模組,並可遞迴查到子目錄下的測試木塊,只有匹配到的檔案名稱才會被載入。如果啟動的不是頂層目錄,那麼頂層目錄必然單獨指定。

  • start_dir:要測試的模組名或測試案例的目錄。
  • pattent=‘test*.py’:表示用例檔案名稱的匹配原則。此處匹配檔案名稱一test開頭的所有.py類型檔案,*表示任意多個字元。
  • top_level_dir=None :測試模組的頂層目錄,如果沒有頂層目錄,預設為None。
import unittest  import json  import requests  from HTMLTestRunner import HTMLTestRunner  import time            #定義測試案例的目錄為目前的目錄  test_dir = ‘./‘  discover = unittest.defaultTestLoader.discover(test_dir,pattern = ‘test*.py‘)        if __name__=="__main__":                      #按照一定的格式擷取當前的時間      now = time.strftime("%Y-%m-%d %H-%M-%S")                    #定義報告存放路徑      filename = ‘./‘ + now + ‘test_result.html‘                fp = open(filename,"wb")          #定義測試報告      runner = HTMLTestRunner(stream =  fp,                              title = "xxx介面測試報告",                              description = "測試案例執行情況:")          #運行測試      runner.run(discover)      fp.close() #關閉報告檔案  

下面直接舉例說明discover用法:

一、 準備工作

 

目錄結構:

 

DiscoverCase.py 檔案代碼:

 

import unittestimport osdef discover_case(case_dir):    # 待執行用例的目錄    testcase = unittest.TestSuite()    discover = unittest.defaultTestLoader.discover(case_dir,pattern="*.py",top_level_dir=None)    # discover方法篩選出來的用例,迴圈添加到測試套件中    print(discover)    for test_suite in discover:        for test_case in test_suite:            print(test_case)            # 添加用例到testcase            #testcase.addTests(test_case)            testcase.addTests(test_case)    return(testcase)path = os.path.join(os.getcwd(), "測試案例")case = discover_case(case_dir=path)print(case)

 

 Test1代碼(test2~4代碼基本相同):

 

 注意:每個testcase裡面的執行用例(即以test開頭的函數)必現大於或等於兩個,不然會報錯。

 二、寫好這些後我們就直接跑程式看結果

 運行後用例的檔案名稱、類名、函數名都會遍曆出來

 

 

 注意:如果用例名稱全為中文是不可以載入的到的,必須以字母開始,比如“i登入.py”

Python- discover()方法與執行順序補充

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.