Python+Selenium框架篇11-封装一个自动发邮件测试报告功能系列-终

本文介绍如何封装一个自动发邮件测试报告功能系列
这一篇是我后面补上的,有些人觉得还比较麻烦,每次都要单独写脚本生成HTMLRunner测试报告,载调用两个方法才能实现自动发邮件测试报告功能。那么这篇我们就把前面学的【生成HTMLRunner方法】和【获取最新测试报告方法】以及【发送带附件邮件方法】都整合封装到一起,这样以后需要自动发送邮件测试报告,只需要调用一个方法就行了。

层次结构如下:
Python+Selenium框架篇11-封装一个自动发邮件测试报告功能系列-终_第1张图片
还是把这个方法整合到公共method.py文件中,这次单独写的没详细注释(看不懂可以参照前面几篇)

代码如下

import time
import HTMLTestRunner
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
        
   #邮件发送最新HTML测试报告
    def report_email(suite, title):
        #生成HTMLRunner测试报告
        now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
        filename = os.path.dirname(os.path.abspath('.')) + '/report/'
        HtmlFile = filename + now + 'HTMLRunner.html'
        fp = open(HtmlFile, 'wb')
        runner = HTMLTestRunner.HTMLTestRunner(
            stream=fp,
            title=title,
            description=u"用例执行情况"
        )
        try:
            runner.run(suite)
            fp.close()
            print("报告已生成:%s" % HtmlFile)

            #获取最新报告
            try:
                lists = os.listdir(filename)
                lists.sort(key=lambda fn: os.path.getatime(filename + "\\" + fn))
                file_new = os.path.join(filename, lists[-1])
               	print("已获取最新测试报告:" + file_new)

                #发送邮件
                try:
                    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, encoding='utf-8')

                    try:
                        smtp = smtplib.SMTP()
                        smtp.connect("smtp.qq.com")
                        smtp.login("[email protected]", "xxxxxxxxxx")
                        smtp.sendmail("[email protected]", "[email protected]", msg.as_string())
                        smtp.quit()
                        print('测试报告已发送到邮箱:' + "[email protected]")
                    except Exception as e:
                        print("测试报告发送失败 !" + e)

                except Exception as e:
                    return e

            except Exception as e:
                print("最新报告获取失败 !" + e)

        except Exception as e:
            print("报告生成失败 !" + e)

新建TestRunner.py文件
代码如下

import unittest
from com.method import Method



suite = unittest.TestLoader().discover('testcase')

if __name__=="__main__":

    Method.report_email(suite, u"百度搜索测试"

这次可以看到代码很简洁了,只需要构建一个suite,再调用report_email方法,就实现了,是不是很简单啊。
下面是执行结果:

报告已生成:D:\Program Files\PycharmProjects\pycharmPrj/report/2019-06-28 18_23_39HTMLRunner.html
已获取最新测试报告:D:\Program Files\PycharmProjects\pycharmPrj/report/2019-06-28 18_23_39HTMLRunner.html
测试报告已发送到邮箱:[email protected]

邮件收到报告如图:
Python+Selenium框架篇11-封装一个自动发邮件测试报告功能系列-终_第2张图片

你可能感兴趣的:(Python+Selenium框架篇11-封装一个自动发邮件测试报告功能系列-终)