這里封裝一個send_mail()方法,用於測試完成后讀取測試報告內容,並將報告內容通過郵件發送到接收人
SMTP:Simple Mail Transfer Protocol,簡單郵件傳輸協議
1 # coding: utf-8 2 3 import smtplib # 導入smtplib模塊 4 from email.mime.text import MIMEText 5 from email.header import Header 6 from .logger import * 7 8 9 def send_email(test_report): 10 11 with open(test_report, 'r', encoding='utf-8') as f: 12 mail_body = f.read() # 打開測試報告,讀取報告內容作為郵件內容 13 sender = '*********@***.com' # 發出郵箱 14 receiver = ['******@***.com', '*******@**.com'] # 接收郵箱 15 mail_server = 'smtp.139.com' # 郵箱服務地址,這里以139郵箱為例 16 subject = '自動化測試報告' # 郵件標題 17 username = '#########' # 郵箱登錄名 18 passwd = '########' # 密碼 19 message = MIMEText(mail_body, 'html', 'utf-8') # 設置郵件格式 20 message['Subject'] = Header(subject, charset='utf-8') 21 # 郵箱登錄 22 smtp = smtplib.SMTP() # 實例化smtplib.SMTP()類對象 23 smtp.connect(mail_server) # 連接郵件服務器 24 smtp.login(username, passwd) # 登錄 25 # 發送郵件 26 for i in receiver: 27 smtp.sendmail(sender, i, message.as_string()) 28 Logger().get_log().info( '郵箱:' + i + ',發送郵件成功!\n') # 打印log 29 smtp.quit()
發送郵件這點,理論上可以直接使用smtp.sendmail(sender, receiver, message.as_string);
實際使用中發現同時發送到多個郵箱時效果不理想,會出現部分郵箱沒有發送;
所以這里使用for循環取接收郵箱遍歷發送!
用例執行后,調用此方法即可實現郵件發送
1 # coding: utf-8 2 # Team : Quality Management Center 3 # Author:Carson 4 # Date :2019/6/19 17:26 5 # Tool :PyCharm 6 7 from constant.path import * 8 import HTMLTestRunner 9 from encapsulation.add_case import * 10 from encapsulation.send_mail import * 11 12 # 設置測試報告參數 13 fp = open(report_path, "wb") 14 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, 15 title=u'測試報告標題', 16 description=u'描述信息:', 17 tester=u'測試人員') 18 # run所有用例 19 runner.run(add_test()) 20 fp.close() 21 time.sleep(1) 22 print(u'測試報告生成地址:' + report_path) 23 time.sleep(5) 24 send_email(report_path)