BeautifulReport底层框架的解析以及html报告页面元素的更改
利用BeautifulReport 模块生成html报告
import BeautifulReport as br#引入包,之后设置一下别名
br = br.BeautifulReport(test_suit)#将用例集加入到对象中
br.report(description="beautifulreport",filename="brtest",log_path="")#执行用例统计结果,并生成测试报告
#filename是测试报告的名称,log_path可以指定测试报告的存储目录,这个参数可选
如上操作report方法实现了用例的执行、用例执行结束的结果统计、生成测试报告等操作。
接下来就通过代码的跟踪来了解一下BeautifulReport 底层结构,便于我们了解代码,以后可以根据自己的实际需求来更改生成的报告。注意:读如下代码时一定要配合着底层代码一起阅读
1、self.suit.run
因为测试用例所在的类继承了unittest.TestCase,所以这里所调用的run方法是TestCase类中的run()方法,进入方法
其中testPartExecutor是用来执行测试用例的具体方法的
addSuccess当用例断言校验成功是会执行addSuccess方法,因为result对象是run()方法的参数,调用run的方法所属类继承了ReportTestResult类,而ReportTestResult最后又继承了TestResult类,所以这个addSuccess方法在TestResult这个类当中,但是因为ReportTestResult重写了TestResult中addSuccess的这个方法,所以最后跟踪到的是ReportTestResult类。
这个方法执行之后呢,继续执行stopTest()方法,这个方法也被ReportTestResult类重写
self.result_list.append这个方法将测试用例执行结果的信息写入到result_list中
可以通过get_testcase_property这个方法增加属性信息,最后向result_list列表中增加属性值,也可以更改最初传过来的参数-(TestCase)测试用例实体类test的内容以便获取test的信息之后操作所需要的属性信息
2、self.stopTestRun
所有测试用例执行完成之后执行stopTestRun方法,方法体中有一个str(MakeResultJson(item))方法,首先实例化MakeResultJson类,将item数据加入这个类中,之后将对象转为字符串,通过str方法,又因为MakeResultJson里面重写了__repr__方法,所以在对象转为字符串是,str(MakeResultJson(item))先调用的str,之后str内部调用的__repr__,又因为MakeResultJson重写了__repr__,所以调用的是最新的__repr__方法
如上的这个方法keys的集合就是显示在html页面上面的关键字信息,所以可以通过更改此方法,从而更改html页面的元素信息
3、self.output_report()
BeautifulReport底层框架的解析以及html报告页面元素的更改的更多相关文章
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Sword框架解析——知识采集流程页面初始化
Sword框架解析——知识采集流程页面初始化 Sword框架解析知识采集流程页面初始化 问题解答流程采集新增页面初始化 1后台t_xt_gnzy表和BLH类 2BLH类的写法前台目录树代码 3登录系统 ...
- 王晶:华为云OCR文字识别服务技术实践、底层框架及应用场景 | AI ProCon 2019
演讲嘉宾 | 王晶(华为云人工智能高级算法工程师王晶) 出品 | AI科技大本营(ID:rgznai100) 近期,由 CSDN 主办的 2019 中国AI 开发者大会(AI ProCon 2019) ...
- [转]谈NAND Flash的底层结构和解析
这里我想以一个纯玩家的角度来谈谈关于NAND Flash的底层结构和解析,可能会有错误的地方,如果有这方面专家强烈欢迎指正. NAND Flash作为一种比较实用的固态硬盘存储介质,有自己的一些物理特 ...
- 对于redis底层框架的理解(一)
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了. 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initser ...
- 恋恋风辰 对于redis底层框架的理解(一)
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了. 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initser ...
- Java volatile 关键字底层实现原理解析
本文转载自Java volatile 关键字底层实现原理解析 导语 在Java多线程并发编程中,volatile关键词扮演着重要角色,它是轻量级的synchronized,在多处理器开发中保证了共享变 ...
- 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析
基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...
- SSM框架整合(实现从数据库到页面展示)
SSM框架整合(实现从数据库到页面展示) 首先创建一个spring-web项目,然后需要配置环境dtd文件的引入,环境配置,jar包引入. 首先让我来看一下ssm的基本项目配件.(代码实现) 1.首先 ...
随机推荐
- APP 安全测试
http://www.cnblogs.com/wetest/p/6694529.html
- 并发之ATOMIC原子操作--CAS乐观锁原理(二)
1.乐观锁介绍 程序完成并发操作时,访问数据时每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止.就是当去做某个修改或其他操作的时候它认为不会有其他线程来做同样的操作(竞争) ...
- Android 服务和广播的使用
Android 服务和广播的使用 服务的使用 创建服务类 创建一个java文件,取名 mService.java,继承Service. public class mService extends Se ...
- selenium选择框
自动化测试中,会遇到选择框,针对该类元素,selenium提供类Select类来处理,使用select类先导入:from selenium.webdriver.support.select impor ...
- gnuplot 让您的数据可视化
https://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html http://blog.sciencenet.cn/blog-3733 ...
- 【vue】 router.beforeEach
import store from '@/store' const Vue = require('vue') const Router = require('vue-router') Vue.use( ...
- Unity相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- Java-POJ1000-A+B Problem
- Go_Json序列化
1. json介绍 2. json格式说明 3. json序列化 3.1 结构体序列化 package main import ( "fmt" "encoding/jso ...
- LOJ#6713. 「EC Final 2019」狄利克雷 k 次根 加强版
题目描述 定义两个函数 \(f, g: \{1, 2, \dots, n\} \rightarrow \mathbb Z\) 的狄利克雷卷积 \(f * g\) 为: \[ (f * g)(n) = ...