pyunit扩展:自动重试失败用例

有时候因为环境问题会导致用例低概率随机失败,比如界面驱动,比如网络不稳定。引入自动重试机制可以降低错误误报的概率。(不过也可能会漏出去低概率的问题,需要根据产品的实际情况把握)。


自动重试可以在框架中支持而不让用例脚本感知,让用例开发人员主要关注测试逻辑,而非自动化本身的健壮性。

自动重试在脚本层或驱动层都可以实现,在pyunit中可以通过装饰器来实现。下面是一段示例:


def retry(times = 3):
	def retry_func(func):
		def _(*args, **kwds):
			for i in range(times):
				try:
					func(*args, **kwds)
					return
				except AssertionError:
					pass
			raise AssertionError(func)
		return _
	return retry_func

class testdemo1(TestCase):
	@retry(5)
	def testAAA(self):
		ret = random.random()
		print ret
		if ret < 0.5:
			self.fail('testAAA')
	@retry(2)
	def testBBB(self):
		ret = random.random()
		print ret
		if ret < 0.5:
			self.fail('testBBB')

class testdemo2(TestCase):
	@retry(4)
	def test111(self):
		ret = random.random()
		print ret
		if ret < 0.5:
			self.fail('test111')
	@retry()
	def test222(self):
		ret = random.random()
		print ret
		if ret < 0.5:
			self.fail('test222')


通过@retry装饰后,如果用例执行失败(AssertionError),可以自动重新执行,直到成功或者达到重试的次数上限。


一次运行的结果如下:

0.255272887549
0.645833964943
.0.325138918291
0.0229733029974
F0.510210565055
.0.426298446422
0.0478510547724
0.608147941968
.
========================================================
FAIL: testBBB (__main__.testdemo1)
--------------------------------------------------------
Traceback (most recent call last):
  File "retry.py", line 15, in _
    raise AssertionError(func)
AssertionError: <function testBBB at 0x0000000002851518>
--------------------------------------------------------
Ran 4 tests in 0.006s


FAILED (failures=1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值