有时候因为环境问题会导致用例低概率随机失败,比如界面驱动,比如网络不稳定。引入自动重试机制可以降低错误误报的概率。(不过也可能会漏出去低概率的问题,需要根据产品的实际情况把握)。
自动重试可以在框架中支持而不让用例脚本感知,让用例开发人员主要关注测试逻辑,而非自动化本身的健壮性。
自动重试在脚本层或驱动层都可以实现,在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')
一次运行的结果如下:
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)