zoukankan      html  css  js  c++  java
  • python3 BeautifulReport测试报告 及 报告中增加日志输出

    https://blog.csdn.net/chenmozhe22/article/details/82888060#2python_19

    原生的HTMLTestRunner很容易找到,偶尔又发现一个更炫酷一点的HTMLTestRunner_PY3,具体详见Github
    https://github.com/huilansame/HTMLTestRunner_PY3 
    BeautifulReport
    https://github.com/TesterlifeRaymond/BeautifulReport

    BeautifulReport 报告展示中增加日志输出:

    1. 在项目初始化时加入logger,设置日志容器名称要与自己设置的一致

    class ReportTestResult(unittest.TestResult):
        """ override"""
    
        def __init__(self, suite, stream=sys.stdout):
            """ pass """
            super(ReportTestResult, self).__init__()
            self.begin_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            self.start_time = 0
            self.stream = stream
            self.end_time = 0
            self.failure_count = 0
            self.error_count = 0
            self.loggor = logging.getLogger('kkb')

    2. 在stertTest函数中初始化logging Handler,记录到内存中

        def startTest(self, test) -> None:
            """
                当测试用例测试即将运行时调用
            :return:
            """
            unittest.TestResult.startTest(self, test)
            stdout_redirector.fp = self.outputBuffer
            stderr_redirector.fp = self.outputBuffer
            self.sys_stdout = sys.stdout
            self.sys_stderr = sys.stderr
            # self.sys_stdout = sys.stderr
            sys.stdout = stdout_redirector
            sys.stderr = stderr_redirector
            self.start_time = time.time()
            # ----add logging output-----fancc
            self.log_cap = StringIO()
            self.ch = logging.StreamHandler(self.log_cap)
            self.ch.setLevel(logging.DEBUG)
            myfmt = logging.Formatter(
                '%(asctime)s - %(name)s - "%(filename)s: %(lineno)d" - %(funcName)s - %(levelname)s - %(message)s')
            self.ch.setFormatter(myfmt)
            self.loggor.addHandler(self.ch)

    3. 在complete_output函数的返回值中加入logging存在内存中的输出,用换行符隔开

        def complete_output(self):
            """
            Disconnect output redirection and return buffer.
            Safe to call multiple times.
            """
            if self.sys_stdout:
                sys.stdout = self.sys_stdout
                sys.stderr = self.sys_stdout
                self.sys_stdout = None
                self.sys_stdout = None
            # add log out put ---------fancc
            return self.outputBuffer.getvalue() + '
    ' + self.log_cap.getvalue()

    4. 每个用例执行完后,最好清除handler,在stopTest函数中加入

        def stopTest(self, test) -> None:
            """
                当测试用力执行完成后进行调用
            :return:
            """
            self.end_time = '{0:.3} s'.format((time.time() - self.start_time))
            self.result_list.append(self.get_all_result_info_tuple(test))
            # 清除log的handle----fancc
            self.complete_output()
            self.loggor.removeHandler(self.ch)

    使用方法后,每个用例都有单独的logging记录,不会重复

    记得在前面引入logging模块           import logging

    相关链接: https://www.cnblogs.com/fengf233/p/10871055.html 

  • 相关阅读:
    idea常用快捷键及操作
    Ubuntu 装nexus
    ubuntu安装gitlab
    ubuntu安装jdk,maven,tomcat
    ubuntu安装gitlab-ci-runner、注册
    ubuntu开启远程shell,开启上传下载
    Ubuntu安装软件提示boot空间不足
    POJ3461 KMP简单变形输出模式串在主串出现的次数
    涨姿势stl map['a']['a']=b;
    对链表的操作(数据结构线性表算法设计练习)
  • 原文地址:https://www.cnblogs.com/fcc-123/p/11382429.html
Copyright © 2011-2022 走看看