在测试中,我必须等待(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调用它。
答案 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异常上失败。