unittest使用discover加載不一樣目錄下的case失敗,提示Path must be within the project

首先須要注意,存放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元素組
相關文章
相關標籤/搜索