我正在使用下面的代码执行指数重试。我已将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()
答案 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():
...
这也使代码更清晰