Hi,
I tried your code with the following:
```
def get_session():
result = requests.Session()
retries = Retry(
total=3, connect=3, read=3,
redirect=3, status=3, backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
method_whitelist=[
"HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"],
)
adapter = HTTPAdapter(max_retries=retries)
result.mount("http://", adapter)
result.mount("https://", adapter)
return result
```
In my unit test, I did the following:
```
@responses.activate
def test_get_session_500_retry(self):
responses.add(responses.POST,
self.url,
status=500,
json={'something': 'nothing'}
)
session = get_session()
session.hooks["response"] = [logging_hook]
print(f"url({self.url})")
wait_time = datetime.now() + timedelta(seconds=10)
r = session.post(self.url, timeout=10)
waited_time = wait_time - datetime.now()
self.assertGreaterEqual(waited_time, timedelta(seconds=0))
self.assertEqual(r.status_code, 500)
assert responses.assert_call_count(
self.url, 1) is True
```
The strange part to me is that the assert_call_count is 1 instead of 3 which I set in the config
use something like mockoon (https://mockoon.com) and set up HTTP routes for 200 OK and a couple statuses in your status_forcelist. turn on random responses and you'll see it working in the logs.
Comment
I think all bets are off when you use one of those request/response mocking libs.
Parent comment
Hi, I tried your code with the following: ``` def get_session(): result = requests.Session() retries = Retry( total=3, connect=3, read=3, redirect=3, status=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], method_whitelist=[ "HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"], ) adapter = HTTPAdapter(max_retries=retries) result.mount("http://", adapter) result.mount("https://", adapter) return result ``` In my unit test, I did the following: ``` @responses.activate def test_get_session_500_retry(self): responses.add(responses.POST, self.url, status=500, json={'something': 'nothing'} ) session = get_session() session.hooks["response"] = [logging_hook] print(f"url({self.url})") wait_time = datetime.now() + timedelta(seconds=10) r = session.post(self.url, timeout=10) waited_time = wait_time - datetime.now() self.assertGreaterEqual(waited_time, timedelta(seconds=0)) self.assertEqual(r.status_code, 500) assert responses.assert_call_count( self.url, 1) is True ``` The strange part to me is that the assert_call_count is 1 instead of 3 which I set in the config
Replies
How do you test reliably that the retries in the call works as expected?
use something like mockoon (https://mockoon.com) and set up HTTP routes for 200 OK and a couple statuses in your status_forcelist. turn on random responses and you'll see it working in the logs.