Python:在不使用函数

时间:2016-04-15 13:34:48

标签: python pytest

在测试中,我必须等待(using time.sleep(30))断言预期结果,但在许多测试中添加睡眠在运行测试时花费太多时间。因此我想到的是polling,即继续检查特定超时的结果,然后提高或我们将得到预期的结果,测试将通过。现在我正在使用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调用它。

1 个答案:

答案 0 :(得分:1)

您可以使用重试包: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异常上失败。