zoukankan      html  css  js  c++  java
  • Python+unittest发送测试报告

    案例将E:Python_scriptunittestTest_Baidu生成的最新测试报告发送到指定邮箱。

    我们将之前的unittest的报告生成和Python自动发送邮件结合在一起,就可以完成自动发送最新报告到指定邮箱的操作。

    代码示例:

    runtest_email.py

    import unittest
    from BSTestRunner import BSTestRunner
    import time
    import smtplib                         # 发送邮件模块
    from email.mime.text import MIMEText   # 定义邮件内容
    from email.header import Header        # 定义邮件标题
    import os
    
    
    def send_mail(latest_report):
        f = open(latest_report, 'rb')
        mail_content = f.read()
        f.close()
        smtpserver = 'smtp.163.com'
        # 发送邮箱用户名密码
        user = 'nancyrm2018@163.com'
        password = '输入自己的密码'
        # 发送和接收邮箱
        sender = 'nancyrm2018@163.com'
        receivers = ['nancyrm2018@126.com', '88886666@qq.com']
        # 发送邮件主题和内容
        subject = "Web Selenium 自动化测试报告"
        # HTML邮件正文
        msg = MIMEText(mail_content, 'html', 'utf-8')
        msg['Subject'] = Header(subject, 'utf-8')
        msg['From'] = sender
        msg['To'] = ','.join(receivers)
    
        smtp = smtplib.SMTP_SSL(smtpserver, 465)
        # HELO 向服务器标识用户身份
        smtp.helo(smtpserver)
        # 服务器返回结果确认
        smtp.ehlo(smtpserver)
        # 登录邮箱服务器用户名和密码
        smtp.login(user, password)
    
        print("Send email start...")
        smtp.sendmail(sender, receivers, msg.as_string())
        smtp.quit()
        print("Email send end!")
    
    
    def latest_report(report_dir):
        lists = os.listdir(report_dir)
        print(lists)
        # 按时间顺序对该目录文件夹下面的文件进行排序
        lists.sort(key=lambda fn: os.path.getatime(report_dir + "\" + fn))
        print("The latest report is:" + lists[-1])
    
        file = os.path.join(report_dir, lists[-1])
        print(file)
        return file
    
    if __name__ == '__main__':
        report_dir = './test_report'
        test_dir = './test_case'
    
        discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        report_name = report_dir + '/' + now + 'result.html'
        with open(report_name, "wb") as f:
            runner = BSTestRunner(stream=f, title='测试报告', description='用例执行情况:')
            runner.run(discover)
            f.close()
    
        # h获取最新测试报告
        latest_report = latest_report(report_dir)
        # 发送邮件报告
        send_mail(latest_report)

    代码分析:
    可以将代码分为3个部分来理解:

    1. 通过unittest框架的discovery()找到匹配测试用例,由HTMLTestRunner 的run()方法执行测试用例并生成最新的测试报告
    2. 调用new_report()函数找到测试报告目录(test_report)下最新生成的测试报告,返回测试报告的路径
    3. 将得到的最新测试报告的完整路径传给send_mail()函数,实现发邮件功能

    代码实现:

     

  • 相关阅读:
    用纯CSS改变下拉列表Select框的默认样式
    前端JS来控制选中的项
    Display:table;妙用,使得左右元素高度相同
    服务器与浏览器缓存协商控制机制的总结
    浏览器缓存机制
    高性能网站建设指南总结
    主题:关于CSS细节集合(一)
    [译] 关于CSS中的float和position
    常用前端开发工具合集
    [JavaScript忍者系列] — CSS选择符引擎入门
  • 原文地址:https://www.cnblogs.com/NancyRM/p/8565797.html
Copyright © 2011-2022 走看看