我正在使用python logging module来记录控制台和文本文件.我HTMLTestRunner用于登录html文件.我想我正在使用HTMLTestRunner 0.8.0
但问题是HTMLTestRunner只打印print语句而日志记录模块不打印print语句.有什么办法可以在html文件中获取日志声明
下面是htmlrunner代码
runner = HTMLTestRunner.HTMLTestRunner(
stream=outfile,
title='Test Report',
description='Regression Test Suite',
verbosity=3
)
result = runner.run(suite)
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用import unittest,我正在使用日志import logging.对于我正在使用的HTML runnerimport HTMLTestRunner
对于在控制台上打印语句,我正在使用logging.info和logging.debug.如果我使用python使用print语句print,那么我既不在控制台也不在日志中获得此输出.但对于HTML日志记录,我只有print语句和stderr.
我的问题:是否有 HTMLTestRunner.HTMLTestRunner某些语句将使用logging.debug和打印在控制台上logging.info
HTMLTestRunner您目前使用的模块大约有6年的历史,并且严重过时.有更好的选择-从开始html-testRunner或者,甚至更好的一个- pytest与HTML报告插件启用.
但是,如果您准备修补/更改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)
Run Code Online (Sandbox Code Playgroud)编辑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)
Run Code Online (Sandbox Code Playgroud)更改_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 ""
)
Run Code Online (Sandbox Code Playgroud)别忘了 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)
Run Code Online (Sandbox Code Playgroud)
report.html运行测试后的内容:
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |