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。
如果访问过慢,可以访问码云
欢迎关注我的个人公众号
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天 一. 实现我要学习功能
随机推荐
- cos中的文件结构(DF/EF/MF/FID/AID/SFI..)
转载自:https://blog.csdn.net/Enjoy_endless/article/details/75108349 刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不 ...
- 深入浅出,新一代跨平台抓包&调式利器Fiddler Everywhere
什么是Fiddler Everywhere? Fiddler Everywhere is a web debugging proxy for macOS, Windows, and Linux. Ca ...
- [JLOI2011]飞行路线题解
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- Samba常见漏洞利用
Samba简介 Samba是linux和unix系统上实现smb协议的一个免费软件,由服务器及客户端程序构成,Samba是面向Linux和Unix环境的Windows互操作性套件.它适用于在可能包括L ...
- 使用gitlab自带的ci/cd实现.net core应用程序的部署
这两天在折腾持续集成和交付,公司考虑使用gitlab自带的ci/cd来处理,特此记下来整个流程步骤. 好记性不如一支烂笔头---尼古拉斯-古人言 第一步: 安装gitlab,这个自然不用多说 第二步: ...
- Problem 1566 - C - Spanning Tree 动态最小生成树
Problem 1566 - C - Spanning Tree 给出一个联通图,然后每次加一条边,每次需要求最小生成树 1 #include <iostream> 2 #include ...
- css图片显示文字(上浮)
<html> <head lang="en"> <meta charset="UTF-8"> <title>&l ...
- Redis中的布隆过滤器及其应用
什么是布隆过滤器 布隆过滤器(Bloom Filter)是由Howard Bloom在1970年提出的一种比较巧妙的概率型数据结构,它可以告诉你某种东西一定不存在或者可能存在.当布隆过滤器说,某种东西 ...
- Java实验项目三——宠物商店
Program:宠物商店的设计(继承,接口,线性线性表) Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...
- Vue | 路由守卫面试常考
前言 最近在整理基础,欢迎掘友们一起交流学习 结尾有彩蛋哦! Vue Router 路由守卫 导图目录 路由守卫分类 全局路由守卫 单个路由守卫 组件路由守卫 路由守卫执行的完整过程 路由守卫分类 全 ...