繁体   English   中英

Python:在不使用函数的情况下重试一些代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM