運行完成後,生成測試報告,報告以郵件附件方式發送html
具體實現過程見代碼及註釋python
import unittest, time, HTMLTestRunner from email.mime.text import MIMEText from email.header import Header import smtplib,os from email.mime.multipart import MIMEMultipart # 發送郵件 def send_mail(new_file_dir, new_file_name, now): # 獲取附件內容 f = open(new_file_dir, 'rb') mail_body = f.read() f.close() # 建立一個帶附件的實例 msg = MIMEMultipart() # 若是沒有附件,這行能夠不要,就只定義 msg = MIMEText('本次測試詳情見附件。','plain','utf-8') # 構造正文 body = MIMEText(mail_body,_subtype='html',_charset='utf-8') # 讀取html附件內容做爲郵件正文 # body = MIMEText('本次測試詳情見附件。','plain','utf-8') # 自定義郵件正文內容 # body = MIMEText('<html><h1>你好!</h1></html>','html','utf-8') msg.attach(body) # 構造附件 att = MIMEText(mail_body, 'base64','utf-8') # base64加密,utf-8格式發送 att["Content-Type"] = 'application/octet-stream' att["Content-Disposition"] = 'attachment; filename=' + new_file_name # 若是文件名是固定的,就是下面的寫法 # att["Content-Disposition"] = 'attachment; filename=HelloWorld.html' # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字 msg.attach(att) # 郵件頭 mail_from='xxxxx@126.com' # mail_to='xxxxx@126.com' mail_to = ['xxxxx@126.com'] # 多個收件人存放在列表中 # msg['Subject']=u"自動化測試報告" msg['Subject']=u"xx項目自動化測試報告:" + now # 發送郵件 smtp = smtplib.SMTP() smtp.connect('smtp.126.com') smtp.login('xxxxx@126.com','********') smtp.sendmail(mail_from,mail_to,msg.as_string()) smtp.quit() print('email has send out !') # 獲取最新文件 def get_new_file(files): # print(files) # ./report/ lists = os.listdir(files) lists.sort(key=lambda fn: os.path.getmtime(files+"\\"+fn)) file_ = os.path.join(files,lists[-1]) print('最新的文件相對路徑爲:'+file_) # ./report/2017-05-31_11_56_18_report.html # print(file_) # ./report/2017-05-31_11_56_18_report.html print('最新的文件爲:'+lists[-1]) # 最新的文件爲:2017-05-31_12_08_48_report.html # print(lists[-1]) # 2017-05-31_11_56_18_report.html return file_, lists[-1] # 獲取指定目錄下符合規則的文件 suit = unittest.defaultTestLoader.discover("./my_test_case", pattern='*.py') # 第二個參數是匹配文件名 if __name__ == '__main__': #獲取當前時間 now = time.strftime("%Y-%m-%d_%H_%M_%S") # 年月日之間最好很差有空格,由於後面做爲參數傳遞當附件名時,空格後面的不會顯示 # print(now) # 2017-05-31_12_04_19 #定義報告存放路徑 fp = open("./report/" + now + "_report.html", 'wb') # "b"表示處理二進制文件 #定義測試報告 runner = HTMLTestRunner.HTMLTestRunner( # HTMLTestRunner文件下的HTMLTestRunner類重寫了unittest中的TextTestRunner類 stream=fp, title=u'百度搜索測試報告', # 以u或U開頭的字符串表示unicode字符串 description=u'【運行環境及用例執行狀況】:win7,Chrome;結果見郵件正文,若有fail且要查看詳情,請下載附件查看,或者本機訪問測試服務器查看,本機訪問:http://<測試服務器IP>:8000/') # runner = unittest.TextTestRunner() # runner.run(suit) #運行測試用例 runner.run(suit) #關閉報告文件 fp.close() # send_mail("./report/2017-05-30 17_15_39_report.html") new_file_dir, new_file_name = get_new_file("./report/") send_mail(new_file_dir, new_file_name, now) # 第一個參數是附件目錄用於讀文件;第二個參數是文件名,用戶展現附件名;第三個參數是時間,用於郵件標題 # 上面兩行能夠替換爲下面兩行,好比進入到C盤,上面地址輸入F:\test\report和F:/test/report,均可以到F:\test\report這個目錄 # new_file = get_new_file(".\\report\\") # send_mail(new_file)