一、BeautifulReport包
BeautifulReport包是基于Python的Unittest进行二次开发的测试报告的包,它生成的测试报告要比原生测试报告要美观很多,下面给大家看一下BeautifulReport生成的测试报告:
从整体来看,我们可以看到以下内容:
- 测试报告的title、用例总数、通过数、失败数、跳过数、开始时间、执行时间、用例分布图等
- 每条用例的类名、test函数方法名称、用例描述、运行时长、运行结果以及操作(在操作里面其实就是记录了用例运行的日志信息)
二、BeautifulReport包二次开发
1、二次开发目的
针对BeautifulReport包进行二次开发,主要的目的如下:
- 在测试报告中新增Http响应状态码,每条用例对应能够显示
- 当Http响应状态码为200或者是201时,显示为绿色
- 当Http响应状态码为Null时(即没有获取到响应码),显示为灰色
- 当Http响应状态码不为上面两个情况时,显示为红色
2、开发方案
2.1、逻辑梳理概要
通过查阅源代码,我们可以知道程序是先获取到test用例的相关信息,然后加载到一个result_list列表中,并将result_list作为一个value传到了字典self.FIELDS的key【testResult】中,然后self.FIELDS会直接下入到template文件,通过js自动将test用例信息展示出来
2.2、二次开发思想
- 测试用例当中需要返回接口响应状态码到控制台中,并设计好统一的格式,方便后续进行正则获取
- 在获取到测试用例日志信息时,通过正则表达式将接口响应状态码抽离出来,赋值给self.httpcode类变量
- 在数据加载result_list时新增加载self.httpcode类变量(需要配置对应的key值)
- 修改template模板文件源码以及JS源码,通过拿到result_list数据写入到模板文件当中,从而生成html测试报告
3、梳理代码逻辑(程序流转是从下往上流转)
1、运行生成测试报告的函数时,程序会将每条用例放到程序进行执行,会获取到用例的类名、函数名、以及用例介绍等信息
2、当用例为成功用例时,会走addSuccess函数,该函数主要是获取相关的test用例控制台的信息以及相关类变量统计计数
def addSuccess(self, test) -> None:
"""
pass
:param test:
:return:
"""
logs = []
output = self. complete_output()
logs.append(output)
if self.verbosity > 1:
sys.stderr.write('ok ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('.')
self.success_counter += 1
self.status = '成功'
self.case_log = output.split('\n')
self._mirrorOutput = True
3、当用例为失败用例时,会走addFailure函数,该函数主要是获取相关的test用例控制台的信息和错误信息以及相关类变量统计计数
def addFailure(self, test, err):
"""
add Some Failures Result and infos
:param test:
:param err:
:return:
"""
logs = []
output = self.complete_output()
logs.append(output)
logs.extend(self.error_or_failure_text(err))
self.failure_count += 1
self.add_test_type('失败', logs)
if self.verbosity > 1:
sys.stderr.write('F ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('F')
self._mirrorOutput = True
4、当用例为报错用例时,会走addError函数,该函数主要是获取相关的test用例控制台的信息和错误信息以及相关类变量统计计数
def addError(self, test, err):
"""
add Some Error Result and infos
:param test:
:param err:
:return:
"""
logs = []
output = self.complete_output()
logs.append(output)
logs.extend(self.error_or_failure_text(err))
self.failure_count += 1
self.add_test_type('失败', logs)
if self.verbosity > 1:
sys.stderr.write('F ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('F')
self._mirrorOutput = True
5、通过addSuccess、addFailure、addError函数,会将test用例的控制台信息以及报错信息(addFailure、addError函数)都赋值给类变量self.case_log
def add_test_type(self, status: str, case_log: list) -> None:
"""
abs