Python提供的单元测试重试功能

时间:2020-07-21 03:05:42

标签: python python-3.x pytest

我正在使用下面的代码执行指数重试。我已将Reties设置为5。作为我的单元测试的一部分,我正在模拟响应并返回状态代码503。但是,当我使用此单元测试时,我看不到执行5次重试。我应该对单元测试进行哪些更改以验证session.get重试了5次?

try:
    max_retries = Retry(total=retries, backoff_factor=5, status_forcelist=[500, 502, 503, 504, 429])
    self.session.mount('https://', HTTPAdapter(max_retries=max_retries))
    # Perform GET request
    response = self.session.get(url, verify=verify)
except Exception as e:
    print(f" Exception occured {e}")
return response

单元测试

def test_my_function_retries(self):    
    responses.add(responses.GET,
                  'https://requesturl',
                  json={}, status=503)
    request.get()

2 个答案:

答案 0 :(得分:1)

我能够使用httpretty测试重试

@httpretty.activate
def test_my_function(self):
    httpretty.register_uri(
        httpretty.GET,
        url,           
        responses=[
            httpretty.Response(
                body='{}',
                status=503,
            ),
        ]
    )

    my_class = MyClass()
    my_class.my_function()
    print(len(httpretty.latest_requests()))

答案 1 :(得分:0)

我不熟悉您使用的重试库,但是看起来可以在此库中找到所需的内容:

https://pypi.org/project/retry/

当我使用重试时,我只是提取功能到我想对另一种方法执行重试,并使用重试装饰器,如下所示:

from retry import retry

@retry(exceptions=IllegalStateException, tries=2, delay=5)
def flaky_function():
    ...

这也使代码更清晰

相关问题