1. Directory structure
Read mailbox configuration reference: https://blog.csdn.net/kk_gods/article/details/109054888
Second, realize
1. Import related libraries
# coding=utf-8
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib,os
2. Get the test report to be sent
There may be multiple test reports in the test report folder, so only the latest test report is obtained here
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. Send email
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. Obtain the sending email, receiving email, and CC email address (refer to https://blog.csdn.net/kk_gods/article/details/109054888 ) and send
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()
3. Test report mail effect