Python3+requests+unittest+log+excel+HTMLTestRunner+email框架介面自動化案例⑻——執行用例
阿新 • • 發佈:2020-07-17
一、用例執行主方法
mail.py
# _*_ coding:utf-8 _*_ import unittest, os, time from Common import getPathInfo, readConfig, HTMLTestRunnerCN_py3,log,sendemail #from tomorrow import threads nowtime = time.strftime("%Y%m%d%H%M%S") log_info = log.Logger().get_logger() on_off=readConfig.Read_Config().get_info('Email','on_off') class All_Test(object): def __init__(self): global report_path path=getPathInfo.get_Path() report_path = os.path.join(path, 'Report') #測試報告存放路徑 if not os.path.exists(report_path): #判斷Logs路徑是否存在 os.mkdir(report_path) #建立Logs檔案 self.caselist_path = os.path.join(path, "caselist.txt") #配置執行哪些測試檔案的配置檔案路徑 self.casepath = os.path.join(path, "TestCase") #測試用例路徑 self.caselist = [] #定義一個空列表 def get_caselist(self): ''' 讀取caselist.txt檔案中的用例名稱,並新增到caselist元素組''' fb = open(self.caselist_path) #開啟檔案 for value in fb.readlines(): #遍歷fb所有資料 if value != '' and not value.startswith('#'): #如果data非空且不以#開頭 self.caselist.append(value.replace('\n', '')) #讀取每行資料會將換行轉換為\n,去掉每行資料中的\n fb.close() #關閉檔案 return self.caselist #返回caselist def add_case(self): ''' 新增測試用例 ''' self.get_caselist() #獲得testcase列表 suite = unittest.TestSuite() #建立測試套件 suite_module = [] #定義一個列表 for case in self.caselist: discover = unittest.defaultTestLoader.discover(self.casepath, pattern=case + '.py',top_level_dir=None) # 載入測試用例 suite_module.append(discover) #將測試用例新增到列表中 if len(suite_module) > 0: #判斷suite_module是否存在元素,列表才能判斷長度,suite不能判斷 for i in suite_module: #如果存在,迴圈取出元素組內容,命名為suite for j in i: suite.addTest(j) #取出suite_module,使用addTest新增到測試集 return suite #返回測試集 else: return None def send_report(self): "#傳送報告到郵件" report_list=os.listdir(report_path) #獲得目錄所有檔案 report_list.sort(key=lambda fn: os.path.getmtime(report_path+"\\"+fn)) #按時間順序排序 file_new=os.path.join(report_path+'\\'+report_list[-1]) #找到最新生成的檔案 sendemail.send_mail(file_new) #呼叫email引數 #@threads(6) def run_case(self): '''執行所有的用例, 並把結果寫入測試報告''' log_info.info("********************TEST START********************") try: all_case = self.add_case() #呼叫add_case獲取suite if all_case != None: test_name = readConfig.Read_Config().get_info('Report', 'test_name') #獲取測試人員姓名 report_title = readConfig.Read_Config().get_info('Report', 'report_title') #獲取測試報告名稱 fp = open(report_path + '\\' + report_title + nowtime + '.html','wb') #定義一個檔案物件,給後面的HTMLTestRunner生成測試報告用,注意開啟方式必須是wb runner = HTMLTestRunnerCN_py3.HTMLTestRunner(stream=fp, title=report_title, description="用例測試情況",tester=test_name) #生成HTML報告 runner.run(all_case) #執行用例 fp.close() else: log_info.info('---測試套件為空---') except Exception as ex: log_info.error(str(ex)) finally: log_info.info("*********************TEST END*********************") # 判斷郵件傳送的開關 if on_off == 'on': self.send_report() #傳送測試報告 else: print("郵件傳送開關關閉") if __name__ == '__main__': result=All_Test() result.run_case()
二、測試報告