解读并加工BeautifulReport 报告模板
使用unittest框架的脚本执行完成后,会生成一个html格式的报告
这个报告是提前制作了一个html的模板,然后将对应的内容写入到模板中,并生成一个最终的报告,这个报告模板在通过 pip install BeautifulReport后,就会在下面路径中存在:
C:\Program Files\Python37\Lib\site-packages\BeautifulReport\template,这个html模板可以将里面的一些表格属性名称修改为适合自己的名称,例如:
1 <body class="gray-bg"> 2 <div class="row border-bottom white-bg dashboard-header"> 3 <div class="col-sm-12 text-center"> 4 <span style="${title}">自动化测试报告</span> 5 </div> 6 </div> 7 <div class="wrapper wrapper-content animated fadeInRight"> 8 <div class="row"> 9 <div class="col-sm-12"> 10 <div class="ibox float-e-margins"> 11 <div class="ibox-title"> 12 <h5 style="${sub-title}">报告汇总</h5> 13 <div class="ibox-tools"> 14 <a class="collapse-link"> 15 <i class="fa fa-chevron-up"></i> 16 </a> 17 <a class="close-link"> 18 <i class="fa fa-times"></i> 19 </a> 20 </div> 21 </div> 22 <div class="ibox-content"> 23 <div class="row"> 24 <div class="col-sm-6 b-r" style="height:350px"> 25 <form class="form-horizontal"> 26 <div class="form-group"> 27 <label class="col-sm-2 control-label text-info">测试目的:</label> 28 <div class="col-sm-5"> 29 <span class="form-control" id="testName"></span> 30 </div> 31 </div> 32 <div class="form-group"> 33 <label class="col-sm-2 control-label text-info">用例总数:</label> 34 <div class="col-sm-5"> 35 <span class="form-control" id="testAll"></span> 36 </div> 37 </div> 38 <div class="form-group"> 39 <label class="col-sm-2 control-label text-navy">用例通过:</label> 40 <div class="col-sm-5"> 41 <span class="form-control" id="testPass"></span> 42 </div> 43 </div> 44 <div class="form-group"> 45 <label class="col-sm-2 control-label text-danger">用例失败:</label> 46 <div class="col-sm-5"> 47 <span class="form-control text-danger" id="testFail"></span> 48 </div> 49 </div> 50 <div class="form-group"> 51 <label class="col-sm-2 control-label text-warning">用例跳过:</label> 52 <div class="col-sm-5"> 53 <span class="form-control text-warning" id="testSkip"></span> 54 </div> 55 </div> 56 <div class="form-group"> 57 <label class="col-sm-2 control-label text-info">开始时间:</label> 58 <div class="col-sm-5"> 59 <span class="form-control" id="beginTime"></span> 60 </div> 61 </div> 62 <div class="form-group"> 63 <label class="col-sm-2 control-label text-info">运行时间:</label> 64 <div class="col-sm-5"> 65 <span class="form-control" id="totalTime"></span> 66 </div> 67 </div> 68 </form> 69 </div> 70 <div class="col-sm-6"> 71 <div style="height:350px" id="echarts-map-chart"></div> 72 </div> 73 </div> 74 </div> 75 </div> 76 </div> 77 </div>
那么通过这个报告生成,都可以做哪些呢,比较指定存储路径,报告主题等,下面直接看BeautifulReport代码,发现要对这个类实例化时,必须要先传入一个suite(也就是测试用例集),然后调用这个类的report方法进行报告生成时,可以传入哪些参数:description, filename: str = None, report_dir='.', log_path=None, theme='theme_default',除去 log_path废弃后,可以有4个参数进行传入,每个参数的具体用法在代码中都有详细说明,这里不再重复。
1 class BeautifulReport(ReportTestResult, PATH): 2 img_path = 'img/' if platform.system() != 'Windows' else 'img\\' 3 4 def __init__(self, suites): 5 super(BeautifulReport, self).__init__(suites) 6 self.suites = suites 7 self.report_dir = None 8 self.title = '自动化测试报告' 9 self.filename = 'report.html' 10 11 def report(self, description, filename: str = None, report_dir='.', log_path=None, theme='theme_default'): 12 """ 13 生成测试报告,并放在当前运行路径下 14 :param report_dir: 生成report的文件存储路径 15 :param filename: 生成文件的filename 16 :param description: 生成文件的注释 17 :param theme: 报告主题名 theme_default theme_cyan theme_candy theme_memories 18 :return: 19 """ 20 if log_path: 21 import warnings 22 message = ('"log_path" is deprecated, please replace with "report_dir"\n' 23 "e.g. result.report(filename='测试报告_demo', description='测试报告', report_dir='report')") 24 warnings.warn(message) 25 26 if filename: 27 self.filename = filename if filename.endswith('.html') else filename + '.html' 28 29 if description: 30 self.title = description 31 32 self.report_dir = os.path.abspath(report_dir) 33 os.makedirs(self.report_dir, exist_ok=True) 34 self.suites.run(result=self) 35 self.stopTestRun(self.title) 36 self.output_report(theme) 37 text = '\n测试已全部完成, 可打开 {} 查看报告'.format(os.path.join(self.report_dir, self.filename)) 38 print(text)
下面列举调用这个模块的实现方法:
1 # -*- coding:utf-8 -*- 2 ''' 3 # @Time : 2019/12/3 16:50 4 # @Author : nihaoya 5 # @FileName: WeiBo_test.py 6 # @Software: PyCharm 7 ''' 8 import os 9 import time 10 import unittest 11 from BeautifulReport import BeautifulReport as bf 12 13 class WeiBo(unittest.TestCase): 14 此处省略 15 16 if __name__ == "__main__": 17 suite = unittest.TestLoader().loadTestsFromTestCase(WeiBo) 18 run = bf(suite) 19 run.report(filename=u"微博测试报告_" + time.strftime("%Y~%m~%d %H~%M~%S"), description=u"以游客形式浏览微博", report_dir="report", theme="theme_memories")