python中的HTML记录器

2024-04-19 05:10:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pythonlogging module来记录控制台和文本文件。我正在使用HTMLTestRunner登录html文件。使用HTMLtener 0.0

但问题是HTMLTestRunner只打印print语句,而日志模块不打印打印语句。有什么方法可以让我在html文件中得到日志记录语句吗

下面是htmlrunner代码

runner = HTMLTestRunner.HTMLTestRunner(
                stream=outfile,
                title='Test Report',
                description='Regression Test Suite',
                verbosity=3
                )
result = runner.run(suite)

编辑:我使用import unittest,对于日志,我使用import logging。对于HTML runner,我使用import HTMLTestRunner

为了在控制台上打印语句,我使用logging.infologging.debug。如果我使用pythonprint的print语句,那么我既不能在控制台中也不能在日志中获得这个输出。但是对于HTML日志,我只有print语句和stderr。在

我的问题是:HTMLTestRunner.HTMLTestRunner是否有某种方式可以使用logging.debuglogging.info在控制台上打印这些语句


Tags: 文件debugtestimportinfologginghtml记录
1条回答
网友
1楼 · 发布于 2024-04-19 05:10:00

{你使用的模块已经过时6年了。有更好的选择-从^{}开始,或者甚至更好的选项-pytest启用HTML reporting plugin。在

但是,如果您已经准备好修补/更改HTMLTestRunner实现,那么我们需要做的是使日志记录和报告中显示的消息正常工作(这只是一种方法):

  • HTMLTestRunner类构造函数添加一个新的logger参数,并将新的处理程序附加到记录器:

    class HTMLTestRunner(Template_mixin):
        def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None, logger=None):  # CHANGE HERE
            # ...
    
            # CHANGE BELOW
            self.log_capture = None
            if logger:
                self.log_capture = StringIO.StringIO()
    
                ch = logging.StreamHandler(self.log_capture)
                ch.setLevel(logging.DEBUG)
    
                formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
                ch.setFormatter(formatter)
    
                logger.addHandler(ch)
    
  • 编辑HEADING_TMPL模板并为日志消息添加占位符:

    HEADING_TMPL = """<div class='heading'>
    <h1>%(title)s</h1>
    %(parameters)s
    <p class='description'>%(description)s</p>
    Logging output:
    <p class='logs'>%(logs)s</p>
    </div>
    """ # variables: (title, parameters, description)
    
  • 更改_generate_heading()方法并填写logs占位符:

    heading = self.HEADING_TMPL % dict(
        title = saxutils.escape(self.title),
        parameters = ''.join(a_lines),
        description = saxutils.escape(self.description),
        logs='<br>'.join(self.log_capture.getvalue().split("\n")) if self.log_capture else ""
    )
    
  • 别忘了import logging

现在,例如,如果您有一个logger实例在测试中写入日志消息的这种测试,您可以将记录器传递到HTMLTestRunner中,然后将日志消息转储到报告中:

import logging
import unittest

import HTMLTestRunner

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


class BasicTestCase(unittest.TestCase):
    def test_one(self):
        logger.info('Test message 1!')
        self.assertEqual(1, 1)

    def test_two(self):
        """Extended description"""
        logger.error('Test message 1!')
        self.assertEqual(2, 2)


if __name__ == '__main__':
    import sys
    logging.basicConfig(stream=sys.stderr)

    with open('report.html', 'w') as report_file:
        runner = HTMLTestRunner.HTMLTestRunner(
            stream=report_file,
            title='Test Report',
            description='Regression Test Suite',
            verbosity=3,
            logger=logger
        )

        suite = unittest.TestLoader().loadTestsFromTestCase(BasicTestCase)

        result = runner.run(suite)
        print(result)

{cd13>测试后的内容:

enter image description here

相关问题 更多 >