1、日志輸出模塊:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2019/11/21 17:41 4 # @Site : 5 # @File : log.py 6 # @Software: PyCharm 7 8 import time 9 import logging 10 11 class LogOutput(): 12 def logOutput(self,log_dir,name_project): 13 ''' 14 :param log_dir: 日志路徑 15 :param name_project: 項目名稱=>用於日志命名 16 :return: 17 ''' 18 # sys.path.append(os.chdir('../log')) 19 now = time.strftime("%Y_%m_%d %H_%M_%S") 20 logging.basicConfig(level=logging.DEBUG, 21 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', 22 datefmt='%a, %d %b %Y %H:%M:%S', 23 filename=log_dir+ now +'-'+name_project+'_test_log.log', 24 filemode='w') 25 logger = logging.getLogger() 26 logger.info(self)
2、報告輸出模塊:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2019/11/21 17:44 4 # @Site : 5 # @File : report.py 6 # @Software: PyCharm 7 8 import time 9 import unittest 10 from BSTestRunner import BSTestRunner 11 12 class ReportOutput(): 13 def reportOutput(self,test_dir,report_dir,name_project): 14 ''' 15 :param test_dir: 用例路徑 16 :param report_dir: 報告路徑 17 :param name_project: 項目名稱=>用於報告命名及描述 18 :return: 19 ''' 20 now = time.strftime("%Y_%m_%d %H_%M_%S") 21 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') #加載測試用例 22 report_name = report_dir + now + '-'+ name_project+'_test_report.html' #報告名稱 23 with open(report_name,'wb') as f: ##運行用例生成測試報告 24 runner = BSTestRunner(stream=f, 25 title=name_project+' UIAuto_Regression Testing Report', 26 description=(name_project+U"UI自動化功能回歸測試"), 27 verbosity=2) 28 runner.run(discover) 29 f.close()
3、郵件發送報告模塊:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/12/27 14:24 # @Site : # @File : send_email.py # @Software: PyCharm import os, sys import smtplib import time from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # path = os.path.dirname(os.path.abspath('.')) # report_path =path+'\\report\\' class Send_email(): def get_newreport(self,report_path): dirs = os.listdir(report_path)#獲取路徑下所有文件 dirs.sort()#獲取到的文件列表排序,reverse -- 排序規則,reverse = True 降序, reverse = False 升序(默認) newreportname = dirs[-1] # print('The new report name: {0}'.format(newreportname)) return newreportname # 返回的是測試報告的名字 def take_messages(self,report_path):#寫郵件 new_report = self.get_newreport(report_path) self.msg = MIMEMultipart() self.msg['Subject'] = 'BBA JIT自動化測試報告' # 郵件的標題 self.msg['date'] = time.strftime('%a, %d %b %Y %H:%M:%S %z') with open(os.path.join(report_path, new_report), 'rb') as f: mailbody = f.read() # 讀取測試報告的內容 html = MIMEText(mailbody, _subtype='html', _charset='utf-8') # 將測試報告的內容放在 郵件的正文當中 self.msg.attach(html) # 將html附加在msg里 # html附件 下面是將測試報告放在附件中發送 att1 = MIMEText(mailbody, 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="TestReport.html"' # 這里的filename可以任意寫,寫什么名字,附件的名字就是什么 self.msg.attach(att1) def send_email(self): # recipients = ['xxxx@xxxx.com', 'xxxx@qq.com', 'xxx@xxxxx.com'] # 發送給多個人 recipients = ['recive@recive.com'] #發送給一個人 self.take_messages() self.msg['from'] = 'from@from.com' # 發送郵件的人,這種是公司郵箱轉發 #self.msg['to'] = recipients # 收件人和發送人必須這里定義一下,執行才不會報錯。 toaddrs = recipients smtp = smtplib.SMTP() smtp.connect('smtp.from.com') smtp.ehlo() smtp.login('from@from.com', 'email_pwd') smtp.sendmail(self.msg['from'], toaddrs, self.msg.as_string()) # 發送郵件 smtp.close() print('sendmail success') if __name__ == '__main__': sender = Send_email() sender.send_email() # print(sender.get_newreport(report_path))
4、調用方法及輸出文件:
目錄結構:
調用方法:
輸出樣式