邮件发送最新测试报告
示例:
import HTMLTestRunner
import unittest
import os
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def allcase():
'''加载测试用例'''
discover = unittest.defaultTestLoader.discover(casepath,
pattern="case*.py",
top_level_dir=None)
return discover
def run_case():
'''执行测试用例,生成测试报告'''
now = time.strftime("%Y_%m_%d %H_%M_%S")
htmlreportpath = os.path.join(reportpath, now+"result.html")
fp = open(htmlreportpath, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u"自动化测试报告",
description=u"测试用例执行情况")
# 调用allcase函数返回值
runner.run(allcase())
fp.close()
def get_report_file(reportpath):
'''获取最新的测试报告'''
lists = os.listdir(reportpath)
lists.sort(key=lambda fn: os.path.getmtime(os.path.join(reportpath, fn)))
# 找到最新生成的报告文件
reportfile = os.path.join(reportpath, lists[-1])
return reportfile
def send_mail(sender, psw, receiver, smtpserver,reportfile, port=465):
'''发送最新的测试报告内容'''
#打开测试报告
with open(reportfile, "rb") as f:
mail_body = f.read()
# 定义邮件内容
msg = MIMEMultipart()
body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
msg['Subject'] = u"自动化测试报告"
msg["from"] = sender
msg["to"] = receiver
msg.attach(body)
# 添加附件
att = MIMEText(open(reportfile, "rb").read(), "base64", "utf-8")
att["Content-Type"] = "application/octet-stream"
att["Content-Disposition"] = 'attachment; filename= "report.html"'
msg.attach(att)
try:
smtp = smtplib.SMTP_SSL(smtpserver, port)
except:
smtp = smtplib.SMTP()
smtp.connect(smtpserver,port)
# 用户名密码
smtp.login(sender, psw)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
if __name__ == '__main__':
casepath = os.path.join(os.getcwd(),"case") #测试用例存放路径
reportpath = os.path.join(os.getcwd(),"report") #测试报告存放路径
run_case() #执行测试用例
reportfile = get_report_file(reportpath)
smtpserver = "smtp.qq.com"
sender = "139271007@qq.com" # 自己的账号
psw = "password" #自己的密码
receiver = "386421542@qq.com" #对方的账号
send_mail(sender, psw, receiver, smtpserver,reportfile)