BSTestRunner增加历史执行记录展示和重试功能
之前对于用例的失败重试,和用例的历史测试记录存储展示做了很多的描述呢,但是都是基于各个项目呢,不方便使用,为了更好的使用,我们对这里进行抽离,抽离出来一个单独的模块,集成到BSTestRunner中,以后我们使用BSTestRunner直接就可以使用里面的失败重试和展示历史记录了。
首先呢,我们对于失败重试做了一个简单的调整。
在BSTestRunner 增加之前的重试代码
TestResult = unittest.TestResult
class MyResult(TestResult):
def __init__(self, verbosity=1, trynum=1):
# 默认次数是0
TestResult.__init__(self)
self.outputBuffer = StringIO()
self.stdout0 = None
self.stderr0 = None
self.success_count = 0
self.failure_count = 0
self.error_count = 0
self.verbosity = verbosity
self.trynnum = trynum
self.result = []
self.trys = 0 #
self.istry = False def startTest(self, test):
TestResult.startTest(self, test)
self.stdout0 = sys.stdout
self.stderr0 = sys.stderr def complete_output(self):
if self.stdout0:
sys.stdout = self.stdout0
sys.stderr = self.stderr0
self.stdout0 = None
self.stderr0 = None
return self.outputBuffer.getvalue() def stopTest(self, test):
# 判断是否要重试
if self.istry is True:
# 如果执行的次数小于重试的次数 就重试
if self.trys < self.trynnum:
# 删除最后一个结果
reslut = self.result.pop(-1)
# 判断结果,如果是错误就把错误的个数减掉
# 如果是失败,就把失败的次数减掉
if reslut[0] == 1:
self.failure_count -= 1
else:
self.error_count -= 1
sys.stderr.write('{}:用例正在重试中。。。'.format(test.id()) + '\n')
# 深copy用例
test = copy.copy(test)
# 重试次数增加+1
self.trys += 1
# 测试
test(self)
else:
self.istry = False
self.trys = 0
self.complete_output() def addSuccess(self, test):
# 成功就不要重试
self.istry = False
self.success_count += 1
TestResult.addSuccess(self, test)
output = self.complete_output()
self.result.append((0, test, output, ''))
if self.verbosity > 1:
sys.stderr.write('ok ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('.') def addError(self, test, err):
# 重试+1,错误次数+1
self.istry = True
self.error_count += 1
TestResult.addError(self, test, err)
_, _exc_str = self.errors[-1]
output = self.complete_output()
self.result.append((2, test, output, _exc_str))
if self.verbosity > 1:
sys.stderr.write('E ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('E') def addFailure(self, test, err):
self.istry = True
TestResult.startTestRun(self)
self.failure_count += 1
TestResult.addFailure(self, test, err)
_, _exc_str = self.failures[-1]
output = self.complete_output()
self.result.append((1, test, output, _exc_str))
if self.verbosity > 1:
sys.stderr.write('F ')
sys.stderr.write(str(test))
sys.stderr.write('\n')
else:
sys.stderr.write('F') def stop(self) -> None:
pass
参数默认增加了默认参数。历史数据,我们在代码中,调整中增加了存储功能,我们默认存在txt文档中。我们看下存储和读取的方法。
name=os.path.join(self.filepath,self.stopTime.strftime('%Y_%m_%d_%H_%M_%S')+'.txt')
with open(name,'w+') as f:
f.write(result.success_count.__str__()+"_"+result.error_count.__str__()+"_"+result.failure_count.__str__())
f.close()
读取历史执行数据源
def _readresult(self): namerun=[]
faillist=[]
success=[]
error=[]
for root,dirs,files in os.walk(self.filepath):
for file in files:
if file.endswith(".txt"):
namerun.append(file.split(".")[0].split("/")[-1])
with open(os.path.join(root,file),'r') as f:
reslut=f.readline().split('\n')[0].split("_")
success.append(reslut[0])
error.append(reslut[1])
faillist.append(reslut[2])
return namerun,faillist,success,error
我们在展示的时候使用了百度的echarts,官网如下。
echarts.apache.org/zh/index.ht…
我们在测试报告中做了展示。(代码太长,我放在github上:BSTestRunner),我们写一段代码演示下。
import unittest,os
from BSTestRunner import BSTestRunner
BASH_DIR="history"
report_path = os.path.join(BASH_DIR,"test.html")
openone = open(report_path, 'w+')
class Clasee(unittest.TestCase):
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
def testoen(self):
self.assertEqual(1,2)
if __name__=="__main__":
besautiful = BSTestRunner(title="报告",
description="测试报告",
stream=openone,
trynum=2,#重试次数
filepath=BASH_DIR,#根目录
is_show=True)#是否展示。
test_suit = unittest.TestSuite()
test_suit.addTests([Clasee("testoen")])
besautiful.run(test_suit)
我们看下结果。
看下测试报告。
完成了我们之前的设想,单独抽离到了git项目中,我贴下仓库的链接。
最后代码放在了github。
https://github.com/liwanlei/BSTestRunner_new
复制代码
如果访问过慢,可以访问码云
https://gitee.com/liwanlei/BSTestRunner_new
欢迎关注我的个人公众号
BSTestRunner增加历史执行记录展示和重试功能的更多相关文章
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- PHP带重试功能的curl
2016年1月13日 10:48:10 星期三 /** * @param string $url 访问链接 * @param string $target 需要重试的标准: 返回结果中是否包含$tar ...
- 转: KindEditor 图片空间文件增加删除文件、文件夹功能(ASP语言环境)
KindEditor 图片上传功能中集成的图片空间文件管理插件可以对已上传图片进行管理,十分便捷,只是没有图片删除功能,仔细研读xieliang分享的经验后,自己动手改造了一下,顺便分享给有同样需求的 ...
- 在iOS上增加手势锁屏、解锁功能
在iOS上增加手势锁屏.解锁功能 在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的. 桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开 ...
- 为VisualSVN Server增加在线修改用户密码的功能
原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过 ...
- 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...
- MySQL数据库连接重试功能和连接超时功能的DB连接Python实现
def reConndb(self): # 数据库连接重试功能和连接超时功能的DB连接 _conn_status = True _max_retries_count = 10 # 设置最大重试次数 _ ...
- 用两行代码实现重试功能,spring-retry真是简单而优雅
背景 最近做的一个需求,需要调用第三方接口.正常情况下,接口的响应是符合要求的,只有在网络抖动等极少数的情况下,会存在超时情况.因为是小概率事件,所以一次超时之后,进行一次重试操作应该就可以了.重试很 ...
- mxonline实战9,我要学习功能块,机构详情展示,收藏功能
对应github地址:第9天 一. 实现我要学习功能
随机推荐
- 滑动窗口经典题 leetcode 3. 无重复字符的最长子串
题目 解题思路 题目要求找出给定字符串中不含有重复字符的最长子串的长度.这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答. 滑动窗口 具体操作如下图示:找到一个子串 s[left...right] ...
- Unity3D 本地数据持久化几种方式
下面介绍几种 Unity本地记录存储的实现方式. 第一种 Unity自身提供的 PlayerPrefs //保存数据 PlayerPrefs.SetString("Name",mN ...
- 精尽Spring Boot源码分析 - 日志系统
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- POJ 3304 Segments 叉积
题意: 找出一条直线,让给出的n条线段在这条直线的投影至少有一个重合的点 转化一下,以重合的点作垂线,那么这条直线一定经过那n条线段.现在就是求找到一条直线,让这条直线经过所有线段 分析: 假设存在这 ...
- 17 shell break与continue
使用 while.until.for.select 循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用 break 或者 continue 关键字. 在C语言.Python.Ja ...
- 剑指offer 1-5
二维数组中的查找 题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中 ...
- Acunetix临时扫描是不够的
Web漏洞扫描程序通常被视为即席工具.最初,所有漏洞扫描程序都是这种工具,并且当前的开源Web应用程序安全解决方案仍遵循该模型.但是,随着Web技术的复杂性和可用性的大幅增加,临时模型已经过时,无法满 ...
- postgresql分组后获取第一条数据
-- 根据编号分组取第一条数据 select * from table t where t.no=(select max(no) from table t1 where t1.no=t.no) -- ...
- Log4cpp配置文件及动态调整日志级别的方法
一.log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试: 可扩展的.多种方式记录日志,包括命令 ...
- window下玩转maven私服全流程,融合创建仓库、上传项目资源、下载私服资源
在互联网项目开发浪潮中,maven成为了项目管理依赖的重要工具,更多时候maven只作为拉取外部依赖的手段.但出于安全的考虑的,部门企业难免封装一些私有的工具类,或开源框架的二次开发封装,mave ...