我们希望的是,自动化脚本运行结束以后,把当前的测试报告和其他相关文档(例如用例)一起发送给项目经理,所以就把发送邮件的脚本写在批量运行文档里了,因为程序是顺序运行的,把发邮件的写在批量运行下边就可以了。
上代码:
import unittest
import HTMLTestReportCN
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys
import io
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir,pattern='api_test.py')
result_file_name = test_dir + '/result.html' #这里给测试报告取名,没有用时间命名,因为用时间的话,发邮件的时候,处理起来比较麻烦,所以就直接用result了,每次运行脚本时,都会覆盖result,所以发送这一个名称的文件就可以了
fp = open(result_file_name,'wb')
if __name__=='__main__':
runner = HTMLTestReportCN.HTMLTestReportCN(
stream = fp,
title = u'用例'
)
runner.run(discover)
fp.close()
#发送多个文件
def send_email(file_path):
username = "*****@qq.com"
passwd = "*****"
sender = "*****@qq.com"
receivers = '*****@qq.com'
msg = MIMEMultipart('related')
msg['Subject'] = '报告'
msg['From'] = sender
msg.attach(MIMEText('测试报告和测试用例'))
#添加附件
for path in file_path: #这里是添加多个不同类型的附件的位置,我这里就添加了两个,html和excel的,如果还有其他类型的文件,比照着if语句复制就可以了
if ".html" in path: #html文件
html_name = path.split("\\")[-1]
part = MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=html_name)
msg.attach(part)
if ".xls" in path: #excel文件
xlsx_name = path.split("\\")[-1]
part = MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=xlsx_name)
msg.attach(part)
smtp = smtplib.SMTP()
smtp.connect("smtp.qq.com")
smtp.login(username, passwd)
smtp.sendmail(sender, receivers, msg.as_string())
smtp.quit()
print ("邮件发送成功")
html_path = ".\\result.html"
xls_path = ".\\saoma.xls"
file_path = [html_path,xls_path] #发送两个附件给一个用户,想要给多个用户的话,参考上一篇
send_email(file_path)
运行完成以后,结果如下:
以上就是发送邮件,并且带有多个附件的使用方法了。
有不理解的地方,评论区见。