整个测试用例执行失败,可以用python自带的包实现。那么如果用例中部分函数执行失败,如何重试执行失败的函数?下面来说说这种情况:
场景:请求一个接口,在接口返回数据后提取里面的batchNo。但是因为数据延迟的原因,请求接口后,可能还没有batchNo生成,再过几秒才会生成batchNo。如何保证用例执行的可以获取到batchNo。
处理方式一:使用time.sleep(),再请求接口前设置强制等待时间,这种不能保证百分之百成功,没有异常重试;
处理方式二:使用retrying。retrying是一个 Python的重试包,可以用来自动重试一些可能运行失败的程序段。这种可以设置最大重试次数,在时间和次数足够大的情况下,能保证成功率。
导包:from retrying import retry
def retry_if_none(execption):
return isinstance(execption,IndexError)
@retry(retry_on_exception=retry_if_none,stop_max_attempt_number=7,wait_fixed=20000)
def test():
# 发送请求
response = requests.request()
r = response.json()
while True:
try:
# 获取后面接口需要的batchNo
batchNo = r['data']['pageData'][0]['batchNo']
except:
raise IndexError
else:
break
将执行中的异常与已经定义的异常对比,如果相同则继续重试。stop_max_attempt_number设置最大重试次数。wait_fixed设置重试间隔,单位为毫秒。
但是以上仅适合在单线程程序中使用,如果请求和提取分开的情况下,就没办法实现了。请求和提取分开的情况下的处理情况,后续找到方法再分享。