Python unittest 单例 失败重跑机制
#由于公司测试环境存在于Redis连接中断的问题(By peer),导致很多测试接口必须有失败重跑的机制。
1. 请求失败,接口返回(error:"系统错误“,status:9999),所以采用assertEqual 断言来满足次动作。
- 首先在 setUp 声明一个变量用来保存规则次数
- 然后再每个case 内部 增加一个if 判断, 主要是通过判断 规则册数是否到阈值,如果已经到了阈值怎主动抛出 异常,从而来实现case 失败后再报告中有失败提示。
- 在代码内部需要增加异常捕获模块,用来不过 assertEqual断言失败 而进入失败重跑逻辑, 在此逻辑可以进行修改初始化 规则变量的值,让if判断逻辑能够每次执行获取的值都有变化,从而来完成单例 失败重跑逻辑,而且测试报告上面也不会重复记录失败次数。
2不啰嗦了 直接上代码
- setUp :
if self.runNo == 3:
print("重试次数已达到阈值:%s次,进行下个接口测试。" % self.runNo)
raise RuntimeError('接口测试执行失败')
return
- 用例模块:
try:
logging.info("测试开始!")
代码执行逻辑
self.assertEqual(0, result['status'], msg='Status状态码错误')
self.assertNotEqual("", result['data'], msg='data数据不能为空')
except KeyError as keyerror:
self.runNo = self.runNo + 1
print("响应结果错误,与预期不符,Response %s;进入重跑机制,第%s次" % (r.text, self.runNo))
_Site.test_B_chargeDivisionBi(self)
except AssertionError as assertionError:
self.runNo = self.runNo + 1
print("响应结果错误,与预期不符,进入重跑机制: %s" % assertionError)
time.sleep(5)
_Site.test_B_chargeDivisionBi(self)
except requests.RequestException as e:
logging.info("请求失败错误是%s" % e)
使用了 断言异常捕获和键值捕获 来完成。
新手上路,请多关照。