本文介绍如何封装一个自动发邮件测试报告功能系列
在上两篇介绍了【发送带附件邮件】和【【找到最新的测试报告】的方法,接下来我介绍何如将自动发送邮件测试报告方法集成封装到自动化项目中
层次结构如下:
首先我们将这两个方法统一封装到公共包method.py方法类里,方便以后调取
代码如下:
import time
import os.path
from email.mime.text import MIMEText
from email.header import Header
import smtplib
class Method(object):
def __init__(self, driver):
self.driver = driver
# 保存截图
def get_windows_img(self):
"""
在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\img下
"""
file_path = os.path.dirname(os.path.abspath('.')) + '/img/'
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
screen_name = file_path + rq + '.png'
try:
self.driver.get_screenshot_as_file(screen_name)
print("已将截图保存到文件夹/img")
except NameError as e:
print("截图保存失败! %s" % e)
self.get_windows_img()
#定义发送邮件
def send_mail(file_new):
f = open(file_new,'rb')
mail_bady = f.read()
f.close()
msg = MIMEText(mail_bady, 'html', 'utf-8')
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
msg['Subject'] = Header("自动化测试报告" + rq, 'utf-8')
try:
smtp = smtplib.SMTP()
smtp.connect("smtp.qq.com")
smtp.login("xxxx@qq.com", "password")
smtp.sendmail("xxxx@qq.com", "xxxx@qq.com", msg.as_string())
smtp.quit()
print('自动化测试报告发送成功 !')
except Exception as e:
print("自动化测试报告发送失败 !")
print(e)
#查找最新测试报告
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
再结合之前di5篇介绍的HTMLTestRunner自动化测试报告方法,新建一个TestRunner.py文件
代码如下:
import HTMLTestRunner
import os,time
import unittest
from com.method import Method
now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) #获取当前系统时间
file_path = os.path.dirname(os.path.abspath('.')) + '/report/' #设置报告保存路径
HtmlFile = file_path + now + "HTMLtemplate.html" #设置报告名称
fp = open(HtmlFile, 'wb')
#构建suit
suite = unittest.TestLoader().discover("testcase")
if __name__=="__main__":
#初始化HTMLTestRunner实例对象,设置报告title和description。
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度测试报告',
description=u"用例执行情况:"
)
#开始执行测试套件
runner.run(suite)
#关闭资源
fp.close()
newreport = Method.new_report(file_path) #获取最新报告
Method.send_email(newreport) #发送测试报告
整个程序的执行过程可分为三个步骤:
【1】通过unittest框架的discover()方法加载测试用例,再由HTMLRunner的run()方法执行测试用例并生成测试报告。
【2】调用封装的new_report()方法找到repor目录下最新生成的测试报告,再返回其路径。
【3】最后将获取到最新测试报告的路径传递给封装的send_email()方法,实现自动发邮件测试报告功能。