What is the proper way of testing throttling in DRF? I coulnd’t find out any answer to this question on the net. I want to have separate tests for each endpoint since each one has custom requests limits (ScopedRateThrottle).
The important thing is that it can’t affect other tests – they have to somehow run without throttling and limiting.
Advertisement
Answer
Like people already mentioned, this doesn’t exactly fall within the scope of unit tests, but still, how about simply doing something like this:
from django.core.urlresolvers import reverse from django.test import override_settings from rest_framework.test import APITestCase, APIClient class ThrottleApiTests(APITestCase): # make sure to override your settings for testing TESTING_THRESHOLD = '5/min' # THROTTLE_THRESHOLD is the variable that you set for DRF DEFAULT_THROTTLE_RATES @override_settings(THROTTLE_THRESHOLD=TESTING_THRESHOLD) def test_check_health(self): client = APIClient() # some end point you want to test (in this case it's a public enpoint that doesn't require authentication _url = reverse('check-health') # this is probably set in settings in you case for i in range(0, self.TESTING_THRESHOLD): client.get(_url) # this call should err response = client.get(_url) # 429 - too many requests self.assertEqual(response.status_code, 429)
Also, regarding your concerns of side-effects, as long as you do user creation in setUp
or setUpTestData
, tests will be isolated (as they should), so no need to worry about ‘dirty’ data or scope in that sense.
Regarding cache clearing between tests, I would just add cache.clear()
in tearDown
or try and clear the specific key defined for throttling.