[英]Python: Retry some lines of code without using function
在测试中,我必须等待( using time.sleep(30)
)来声明预期的结果,但是在运行测试时,在许多测试中添加睡眠会花费太多时间。 因此,想到的想法是polling
,即继续检查特定超时的结果,然后提出,否则我们将获得预期的结果并且测试将通过。 目前,我正在使用轮询包,并且必须使用断言代码创建一个函数,然后将此回调传递给polling
并指定超时和重试等。
def assert_results():
response = request.get(some_url)
assert response.status_code == 200
assert len(response.json()['results']) == 10
polling.poll(assert_results, timeout=30, step=3)
这样,我必须为不同的测试创建很多这样的函数,但是我想重试这些行,而无需像
with some_python_cool_feature(timeout=60, retry_interval=3):
response = request.get(some_url)
assert response.status_code == 200
assert len(response.json()['results']) == 10
我想,也许我们可以使用上下文管理器来做这些事情,但是我做不到。 非常感谢您的帮助,但是我不希望使用某个函数然后通过try catch调用它的解决方案。
您可以使用重试包: https : //pypi.python.org/pypi/retrying 。 只需用@retry
装饰您的测试,如果它引发错误,它将重试。
@retry(stop_max_attempt_number=7)
def test_something():
response = request.get(some_url)
assert response.status_code == 200
assert len(response.json()['results']) == 10
@retry
装饰器会收到许多其他参数,用于定义您的重试功能,因此您应该被设置。
请注意,在您的情况下,这将特别在出现AssertionError异常时失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.