当我们在做自动化测试的时候,发现unittest不能支持用例失败自动重运行机制,需要做扩展,达到像java的testng一样支持失败重运行,提高测试质量。
第一个解决方法是,我们使用decorator创建一个失败重运行装饰器,然后在每个用例方法使用这个装饰器可以达到失败重运行,但是有两个缺点:一是写每个用例方法后都要加上装饰器,二是失败不能重运行setUp()和dearDown(),如果用例有这初始化和销毁的,不能重新运行这两部分。
实例代码:
def failrun(n=3):
def decorator(func):
def wrapper(*args,**kw):
for i in range(n):
try:
r=func(*args,**kw)
return r
except AssertionError as err:
print '用例第一次失败原因:%s'%err
raise AssertionError
return wrapper
return decorator
经过多次研读和调试unittest代码,后来发现一个也可以重运行setUp()和dearDown()的解决办法,那就是修改源码,我们重新建一个模块套件类来覆盖原来的TestSuite类
实例代码:
class Suit(unittest.TestSuite):
def ru