• 测试组件 AllureHandler


    """

    allure报告相关
    """


    import os
    import subprocess
    import zipfile
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from utils.LogHandler import logger




    from conf import settings


    class AllureOperate(object):


        def get_allure_report(self):
            """ 生成报告 """

            # os.system(ALLURE_COMMAND)
            # subprocess.Popen(ALLURE_COMMAND, shell=True)
            logger().info('正在生成测试报告.....')
            subprocess.call(settings.ALLURE_COMMAND, shell=True)
            logger().info('生成测试报告成功.....')
            '''
                ["allure", "generate", ]
            '''



        def check_zip(self):
            """ 打包 """
            try:
                logger().info('正在打包测试报告.....')
                # BASE_DIR:当前脚本的父级目录
                BASE_DIR = os.path.join(settings.BASE_DIR, 'report')
                start_zip_dir = os.path.join(BASE_DIR, 'allure_result')  # 要压缩文件夹的根路径
                zip_file_name = 'allure_report.zip'  # 为压缩后的文件起个名字

                zip_file_path = os.path.join(BASE_DIR, zip_file_name)
                f = zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED)
                for dir_path, dir_name, file_names in os.walk(start_zip_dir):
                    # 要是不replace,就从根目录开始复制
                    file_path = dir_path.replace(start_zip_dir, '')
                    # 实现当前文件夹以及包含的所有文件
                    file_path = file_path and file_path + os.sep or ''
                    for file_name in file_names:
                        f.write(os.path.join(dir_path, file_name), file_path + file_name)
                f.close()
                logger().info('打包测试报告完成.....')
            except Exception as e:
                logger().error('打包测试报告失败: {}'.format(e))


        def send_mail(self):

            # 第三方 SMTP 服务
            mail_host = settings.MAIL_HOST  # 设置服务器   # 勿动
            mail_user = settings.MAIL_USER  # 用户名
            mail_pass = settings.MAIL_TOKEN  # 口令
            # 设置收件人和发件人
            sender = settings.SENDER
            receivers = settings.RECEIVERS

            # 创建一个带附件的实例对象
            message = MIMEMultipart()

            # 邮件主题、收件人、发件人
            subject = settings.THEME  # 邮件主题
            message['Subject'] = Header(subject, 'utf-8')
            message['From'] = Header("{}".format(sender), 'utf-8')  # 发件人
            message['To'] = Header("{}".format(';'.join(receivers)), 'utf-8')  # 收件人
            # 邮件正文内容
            send_content = settings.SEND_CONTENT
            content_obj = MIMEText(send_content, 'plain', 'utf-8')  # 第一个参数为邮件内容
            message.attach(content_obj)

            # 构造附件
            att = MIMEText(_text=self._get_zip_file(), _subtype='base64', _charset='utf-8')
            att["Content-Type"] = 'application/octet-stream'
            att["Content-Disposition"] = 'attachment; filename="{}"'.format(settings.SEND_FILE_NAME
                                                                            )  # # filename 为邮件附件中显示什么名字
            message.attach(att)

            try:
                smtp_obj = smtplib.SMTP()
                smtp_obj.connect(mail_host, 25)  # 25 为 SMTP 端口号
                smtp_obj.login(mail_user, mail_pass)
                smtp_obj.sendmail(sender, receivers, message.as_string())
                smtp_obj.quit()
                logger().info('邮件发送成功')

            except smtplib.SMTPException as e:
                logger().error('email send error: {}'.format(e))
        def _get_zip_file(self):
            """ 获取zip文件内容 """
            with open(file=os.path.join(settings.BASE_DIR, 'report', 'allure_report.zip'), mode='rb') as f:
                return f.read()




    if __name__ == '__main__':

        AllureOperate().get_allure_report()


  • 相关阅读:
    快速创建MockAPI
    Eolinker SaaS 7.5 版本更新
    【翻译】几个优质的REST API工具
    建立RESTful API测试程序的基础
    Ubuntu下gcc安装及使用
    c++转化成delphi的代码
    VCL组件的属性和方法详解
    Delphi组件开发教程指南目录
    FASM 第一章 简介
    (一)SQL 基础知识
  • 原文地址:https://www.cnblogs.com/hude/p/12888437.html
Copyright © 2020-2023  润新知