我正在使用python logging module
记录到控制台和文本文件。我正在使用HTMLTestRunner
登录html文件。我猜我正在使用HTMLTestRunner 0.8.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运行程序,我正在使用import HTMLTestRunner
为了在控制台上打印语句,我使用了
logging.info
和logging.debug
。如果我使用python print
使用print语句,那么我既不会在控制台中也不会在日志中获得此输出。但是对于HTML日志记录,我只有print
语句和stderr
。我的查询:某种程度上
HTMLTestRunner.HTMLTestRunner
是否会有使用logging.debug
和logging.info
打印在控制台上的语句 最佳答案
您当前使用的 HTMLTestRunner
模块大约有6年的历史,并且已严重过时。有更好的选择-从 html-testRunner
开始,甚至更好的选择-启用了HTML reporting plugin的pytest
。
但是,如果您准备修补/更改HTMLTestRunner
实现,则需要执行以下操作以使日志工作和报告中显示的消息生效(这只是其中一种方法):
logger
类构造函数添加新的HTMLTestRunner
参数,并将新的处理程序附加到记录器: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)
运行测试后,
report.html
的内容:关于python - python中的HTML记录器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47924507/