python report_python3 BeautifulReport测试报告 及 报告中增加日志输出

原生的HTMLTestRunner很容易找到,偶尔又发现一个更炫酷一点的HTMLTestRunner_PY3,具体详见Github

https://github.com/huilansame/HTMLTestRunner_PY3

BeautifulReport

https://github.com/TesterlifeRaymond/BeautifulReport

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

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

classReportTestResult(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存在内存中的输出,用换行符隔开

defcomplete_output(self):"""Disconnect output redirection and return buffer.

Safe to call multiple times."""

ifself.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() + '\n' + 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

你可能感兴趣的:(python,report)