import unittest
from HTMLTestRunner import HTMLTestRunner
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
#=======================定义发送邮件======================#
def send_mail(file_new,fileup):
f = open(file_new, 'rb')
mail_body = f.read()
f.close()
# 发送邮箱服务器
smtpserver = '***'
# 发送邮箱用户/密码
username = '***'
password = '***'
# 发送邮箱
sender = '***'
# 接收邮箱
receiver = ['***','***']
# 邮件正文内容
msg = MIMEMultipart()
msg.attach(MIMEText(mail_body,'html','utf-8'))
msg['From'] = Header(sender, 'utf-8')
#msg['To'] = Header(receiver, 'utf-8')
#多个接收人,msg['To'] 是字符串,多个地址用逗号分开; sendmail()函数的mailTo形参是列表类型,而且两个地址要一致
msg['To'] = ",".join(receiver)
msg['Subject'] = Header('自动化测试报告', 'utf-8') # Header()定义邮件主题
# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open(fileup, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="report.html"'
msg.attach(att1)
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print('email has send out!')
#=======================查找最新的测试报告======================#
def new_report(testreport):
lists = os.listdir(testreport) # 获取目录下所有文件及文件夹
lists.sort(key=lambda fn: os.path.getatime(testreport + "\\" + fn))
file_new = os.path.join(testreport, lists[-1])
print(file_new)
return file_new
if __name__ == '__main__':
test_dir = './' # 定义测试用例的目录为当前目录
test_report = './Result'#定义报告路径
# discover方法筛选当前目录下以“test”开头的“.py”类型文件中的用例,循环添加到测试套件中
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
#按照一定格式获取当前时间
now = time.strftime('%Y-%m-%d %H_%M_%S')
#定义测试报告的存放路径
filename = './Result/' + now + 'result.html'
fp = open(filename,'wb')
# 定义测试报告
runner = HTMLTestRunner(stream=fp,title='自动化测试报告',description='用例执行情况:')
runner.run(discover)
fp.close()
newreport = new_report(test_report)#获取最新的测试报告
send_mail(newreport,newreport)#发送待最新测试报告的邮件
Python:email生成测试报告、发送邮件
于 2019-09-27 10:47:19 首次发布