有这样的一个场景:
假设生成的测试报告与多人相关,每个人都去测试服务器査看就会比较麻烦,如果把这种主动的且不及时的査看变成被动且及时的査收,就方便多了。
整个程序的执行过程可以分为三个步骤:
① 通过unittest框架的discover()找到匹配测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。
② 调用new_report()函数找到测试报告目录(test_case)下最新生成的测试报告,返回测试报告的路径。
③ 将得到的最新测试报告的完整路径传给send_mail()函数,实现发邮件功能。
实例代码如下:
import unittestimport timeimport osimport smtplibfrom HTMLTestRunner import HTMLTestRunnerfrom email.mime.text import MIMETextfrom email.header import Headerfrom email.mime.multipart import MIMEMultipart #定义发送邮件def send_mail(file_new): f=open(file_new,‘rb‘) mail_body=f.read() f.close() #构造附件 att = MIMEText(mail_body, ‘base64‘, ‘utf-8‘) att["Content-Type"] = ‘application/octet-stream‘ att["Content-Disposition"] = ‘attachment;filename="latestResult.html"‘ msg = MIMEMultipart(‘related‘) msg[‘subject‘] = Header("自动化测试报告", ‘utf-8‘) msg.attach(att) #加邮件头 #加邮件头 msg[‘From‘] = ‘[email protected] <[email protected]>‘ msg[‘To‘] = ‘[email protected]‘ smtp=smtplib.SMTP() smtp.connect("smtp.sina.com",25) smtp.login("[email protected]","lili123456") smtp.sendmail(‘[email protected]‘,‘[email protected]‘,msg.as_string()) smtp.quit() print("email has send out!") #查找测试报告目录,找到最新生成的测试报告文件,并发送def new_report(test_report): lists=os.listdir(test_report) lists.sort(key=lambda fn :os.path.getmtime(test_report+‘\\‘+fn)) print((‘最新的文件为:‘+lists[-1])) file_new=os.path.join(test_report,lists[-1]) print(file_new) return file_newif __name__==‘__main__‘: test_dir = r‘E:\selenium+puthon+pycharm学习\test_project\test_case‘ discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘test_*.py‘) now = time.strftime("%Y-%m-%d %H-%M-%S") filename = test_dir + ‘//‘ + now + ‘result.html‘ fp = open(filename, ‘wb‘) runner = HTMLTestRunner(stream=fp, title=‘测试报告‘, description=‘用例测试执行情况:‘) runner.run(discover) fp.close() newReport = new_report(test_dir) send_mail(newReport)
登录126邮件可以查看到:
生成的测试报告通过邮件附件打开可以看到:
原文地址:https://www.cnblogs.com/linxiu-0925/p/9946903.html
时间: 2024-10-14 04:57:27