#-*-coding:utf-8 -*- import HTMLTestRunner import unittest import time import sys import os import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from login import umeiLogin reload(sys) sys.setdefaultencoding('utf8') def new_file(test_dir): #列舉test_dir目錄下的所有文件,結果以列表形式返回。 lists=os.listdir(test_dir) #sort按key的關鍵字進行排序,lambda的入參fn為lists列表的元素,獲取文件的最后修改時間 #最后對lists元素,按文件修改時間大小從小到大排序。 lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\'+fn)) #獲取最新文件的絕對路徑 file_path=os.path.join(test_dir,lists[-1]) return file_path # 3.定義:發送郵件,發送最新測試報告html def send_email(newfile): # 打開文件 f = open(newfile, 'rb') # 讀取文件內容 mail_body = f.read() # 關閉文件 f.close() # 發送郵箱服務器 smtpserver = 'smtp.163.com' # 發送郵箱用戶名/密碼 user = 'XXXX@163.com' password = 'XXXXX' # 發送郵箱 sender = 'XXXXX@163.com' # 多個接收郵箱,單個收件人的話,直接是receiver='XXX@163.com' receiver = ['XXXXX@163.com'] # 發送郵件主題 subject = '自動化測試報告' msg = MIMEMultipart('mixed') msg_html1 = MIMEText(mail_body, 'html', 'utf-8') msg.attach(msg_html1) msg_html = MIMEText(mail_body, 'html', 'utf-8') msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"' msg.attach(msg_html) # 要加上msg['From']這句話,否則會報554的錯誤。 # 要在163設置授權碼(即客戶端的密碼),否則會報535 msg['From'] = 'XXXX@163.com' # msg['To'] = 'XXX@doov.com.cn' # 多個收件人 msg['To'] = ";".join(receiver) msg['Subject'] = Header(subject, 'utf-8') # 連接發送郵件 smtp = smtplib.SMTP() smtp.connect(smtpserver, 25) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() if __name__=="__main__": print '===== Start ======' # 1.執行測試用例,生成最新的測試用例 # 指定測試用例為當前文件夾下的test_case目錄 test_dir = 'D:\\study\\TestCase' # 指定測試報告的路徑 test_report_dir = 'D:\\study\\report' # 包裝測試用例 suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(umeiLogin.umeiLogin)) #生成與執行時間相同的測試報告 now = time.strftime('%Y-%m-%d_%H_%M_%S_') filename = test_report_dir + '\\' + now + 'result.html' fp = open(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行情況:') runner.run(suite) fp.close() # 2.取最新測試報告 new_report = new_file(test_report_dir) # 3.發送郵件,發送最新測試報告html send_email(new_report) print '===== Over ======'