1. 程式人生 > >Python unittest利用discover獲取指定目錄或多級目錄下的測試用例

Python unittest利用discover獲取指定目錄或多級目錄下的測試用例

最近在寫介面自動化框架,由python+requests+unittest構建(其他還有些匯入模組,這裡暫且不說),目前還在搭建當中,整體其框架結構如下:

在編寫Common下的RunTools元件(主要封裝的是獲取測試用例、執行測試、生成測試報告、傳送郵件等相關函式) 時,遇到一些坑,在這裡進行總結:

1、利用unittest的discover獲取指定目錄下匹配的相關測試用例

封裝函式如下:

class RunTools:
def chooseDirCases(self,casedir,pattern):
    '''
    根據指定目錄獲取匹配的測試用例
    :param casedir: 測試用例目錄路徑
    :param pattern: 匹配模式
    :return: 測試用例集
    '''
    discover_cases=unittest.defaultTestLoader.discover(casedirpath,pattern=pattern)
    return discover_cases

例項:

runtools=RunTools()
a=runtools.chooseDirCases('DL_Cases','test*.py')

tips:這種方式是可以獲取指定目錄下的匹配模式的測試用例,目錄的屬性可以是dict,也可以是python package

2、利用unittest的discover獲取多級目錄的所有測試用例

封裝函式如下:

class RunTools:
def chooseAllCases(self,pattern):
    '''
    獲取TestCases下所有的測試用例
    :param pattern: 匹配模式
    :return: 測試用例集
    '''
    discover_all_cases=unittest.defaultTestLoader.discover(testcase_path,pattern=pattern,top_level_dir=None)   #testcase_path是測試用例的根目錄
    return discover_all_cases

例項:

runtools=RunTools()
b=runtools.chooseAllCases('test*.py')

tip:discover是遞迴匹配檔案的,如果設定的目錄是測試用例的根目錄的話,discover會去匹配每個子目錄下的所有用例,匹配成功的用例就載入到discover,但是在這裡需要注意一點,存放用例的目錄屬性必須是python package,必須要有__init__.py,不然不會獲取成功。