首先須要注意,存放case的子目錄需爲python package,即存在__init__.py文件python
目前代碼中discover結構app
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致使:ui
discover 第三個參數 top_level_dir 第一次運行時若是爲None 會取當前傳入的start_dir所在路徑爲 top_level_dir,而top_level_dir會做爲self的參數保存下來,這樣第二次運行時 top_level_dir實際取的是上一次的路徑,直接影響到了下一次的運行spa
所以規避此問題方法:code
一、將全部case保存在同一目錄下,或 只調用一次discoverblog
二、若是須要調用屢次,且在不一樣目錄下的話,那麼須要手動給top_level_dir傳值,將根目錄的值給此參數字符串
即修改成:it
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元素組