使用unittest的discover方法發現目錄中子文件夾中的case

前言:開始用的時候都是把所有的test.py文件放在一個目錄下,雖然對運行沒什麼影響,但是吧,總是不那麼好看,且有時候文件名類似,要找好久,就想能不能再創建子文件夾進行分類一下,那又該如何使用discover方法去拿到所有用例呢?下面分享。

可能有人說可以用pytest框架,可以的,我可以用,但是我還想基於Unittest去解決試試。

第一種方法:

testcase目錄

上代碼:

註釋寫的很詳細,其邏輯很簡單,就是先用os.walk()方法拿到所有的py文件名稱,再用判斷去除非testcase.py文件,添加進case_list列表,再遍歷case_list得到單個文件名,然後用discover中的pattern匹配方式去匹配相應文件名的文件得到單個testcase,就可以拿到所有的用例了。

特別注意一點:要想拿到所有的testcase必須在每個文件夾中有一個__init__.py文件引導,否則無法獲取。

# pro_path是工程目錄,構造了一個case_pth路徑
case_path = os.path.join(pro_path, "testcase")
        suit = unittest.TestSuite()
        case_list = []

        # 使用os.walk方法遍歷得到所有文件名稱filename的列表集合
        for dirpath, dirname, filename in os.walk(case_path):
            for file in filename:
                # 判斷文件以.py結尾且不以__開始,爲去除__init.py文件和.pyx後綴的文件
                if file.endswith(".py") and not file.startswith("__"):
                    # print(file)
                    case_list.append(file)

        # 得到有效的用例文件列表後傳值給discover方法的pattern匹配方式,可拿到所有testcase
        # 此處注意,要想拿到所有的testcase必須在每個文件夾中有一個__init__.py文件引導,否則無法獲取。
        for case in case_list:
            discover = unittest.defaultTestLoader.discover(start_dir=case_path, pattern=case)
            suit.addTest(discover)  

第二種方法:

用一個txt配置文件去記錄所有的test.py文件,

上代碼:思路我就不講解了,註釋很清晰

caseListFile = os.path.join(pro_path, "caselist")
fb = open(caseListFile)
        # 逐行讀取文件名信息
        for value in fb.readlines():
            data = str(value)
            # 過濾空格和#開頭註釋的文件名
            if data != '' and not data.startswith("#"):
                # 再添加進caseList列表中
                self.caseList.append(data.replace("\n", ""))
        fb.close()
test_suite = unittest.TestSuite()
        # 遍歷caseList列表
        for case in self.caseList:
            # 讀取的文件名帶了user路徑,使用split進行分割,[-1]最後一個值
            case_name = case.split("/")[-1]
            print(case_name+".py")
            # 使用discover方法去尋找以case_name開頭的文件(txt中並未帶.py後綴)
            discover = unittest.defaultTestLoader.discover(self.caseFile, pattern=case_name + '.py', top_level_dir=None)
            suite_module.append(discover)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章