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,不然不會獲取成功。