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


可以根據不同的功能創建不同的測試文件,甚至是不同的測試目錄,測試文件中還可以將不同的小功能划分為不同的測試類,在類下編寫測試用例,讓整體結構更加清晰

但通過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 unittest
import os

def 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”


免責聲明!

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



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