一、目录结构
读取邮箱配置参考:https://blog.csdn.net/kk_gods/article/details/109054888
二、实现
1、导入相关库
# coding=utf-8
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib,os
2、获取要发送的测试报告
测试报告文件夹下可能存在多个测试报告,所以在这里只获取最新的测试报告
def get_report_file(report_path):
"""
获取最新的测试报告
:param report_path:
:return:
"""
lists = os.listdir(report_path)
lists.sort(key=lambda fn: os.path.getmtime(os.path.join(report_path, fn)))
print(u'最新测试生成的报告: '+lists[-1])
# 找到最新生成的报告文件
report_file = os.path.join(report_path, lists[-1])
return report_file
3、发送邮件
def send_mail(sender, psw, receiver, cc_receiver, smtpserver, report_file, port):
"""发送最新的测试报告内容"""
with open(report_file, "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"] = ",".join(receiver)
msg["Cc"] = ",".join(cc_receiver)
msg.attach(body)
# 添加附件
att = MIMEText(open(report_file, "rb").read(), "base64", "utf-8")
att["Content-Type"] = "application/octet-stream"
att["Content-Disposition"] = 'attachment; filename= "report.html"'
msg.attach(att)
smtp = smtplib.SMTP()
smtp.connect(smtpserver, port)
# 用户名密码
smtp.login(sender, psw)
smtp.sendmail(sender, receiver+cc_receiver, msg.as_string())
smtp.quit()
print('Test report email has send to {} !'.format(receiver))
4、获取发件邮箱、收件邮箱、抄送邮箱地址(参考https://blog.csdn.net/kk_gods/article/details/109054888)并发送
def main():
# 获取最新的测试报告文件
report_path = os.path.join(cur_path, "report") # 测试报告文件夹
report_file = get_report_file(report_path) # 获取最新的测试报告
print('report_file: ', report_file)
# 邮箱配置
sender = readconfig.sender
psw = readconfig.psw
smtp_server = readconfig.smtp_server
port = readconfig.port
receivers = readconfig.receiver.split(',')
cc_receiver = readconfig.cc_receiver.split(',')
send_mail(sender, psw, receivers, cc_receiver, smtp_server, report_file, port) # 发送报告
if __name__ == "__main__":
main()
三、测试报告邮件效果