首先需要注意,存放case的子目錄需為python package,即存在__init__.py文件
目前代碼中discover結構
for case in self.caseList: # 從caselist元素組中循環取出case case_name = case.split('/')[-1] # 通過split函數來將aaa/bbb分割字符串,取出case名 file_path = self.caseFilePath + case.split('/')[0] # 用例文件路徑 # 批量加載用例,第一個參數為用例存放路徑,第二個參數為路徑文件名,top_level_dir用例根目錄路徑,默認為None discover = unittest.defaultTestLoader.discover( file_path, pattern=case_name+'.py', top_level_dir=None ) log.info(discover) suite_module.append(discover) # 將discover存入suite_module元素組
存在多個目錄下的case時,加載第一個case通過,但當加載第二個case時失敗,提示:Path must be within the project
這個是因為discover中的第三個參數top_level_dir導致:
discover 第三個參數 top_level_dir 第一次運行時如果為None 會取當前傳入的start_dir所在路徑為 top_level_dir,而top_level_dir會作為self的參數保存下來,這樣第二次運行時 top_level_dir實際取的是上一次的路徑,直接影響到了下一次的運行
因此規避此問題方法:
1、將所有case保存在同一目錄下,或 只調用一次discover
2、如果需要調用多次,且在不同目錄下的話,那么需要手動給top_level_dir傳值,將根目錄的值給此參數
即修改為:
for case in self.caseList: # 從caselist元素組中循環取出case case_name = case.split('/')[-1] # 通過split函數來將aaa/bbb分割字符串,取出case名 file_path = case.split('/')[0] # 用例文件路徑 # 批量加載用例,第一個參數為用例存放路徑,第二個參數為路徑文件名,top_level_dir用例根目錄路徑,默認為None discover = unittest.defaultTestLoader.discover( file_path, pattern=case_name+'.py', top_level_dir=self.casePath # self.casePath為case存放子目錄的上級目錄 ) log.info(discover) suite_module.append(discover) # 將discover存入suite_module元素組