Wie die Menschen bereits erwähnt, dies nicht genau im Rahmen der Unit-Tests fallen, aber immer noch, wie sei es einfach so etwas wie dies zu tun:
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)
Auch in Bezug auf Ihre Anliegen von Nebenwirkungen, Solange Sie die Benutzererstellung in setUp
oder setUpTestData
vornehmen, werden die Tests isoliert (wie sie sollten), so dass Sie sich in diesem Sinne keine Gedanken über "schmutzige" Daten oder Bereiche machen müssen.
In Bezug auf cache clearing between tests, ich würde einfach hinzufügen cache.clear()
in tearDown
oder versuchen und löschen Sie die specific key defined for throttling.
Die erste Frage, die Sie sich stellen müssen: Testen Sie Ihren Code? In der Regel macht es keinen Sinn, den Code von Drittanbietern in Unit-Tests zu testen. Das ist die Aufgabe der dritten Partei. Sie können sie im Integrations- und Verhaltenstest testen. Sie haben nichts darüber geschrieben, welche Art von Test Sie durchführen möchten. –
Ok, danke @KlausD., Ich werde es dann nicht testen. – Glen
Es ist wahrscheinlich nicht sinnvoll, solche Tests in Ihren lokalen Komponententest oder Ihre CI-Testsuite aufzunehmen. Ich denke jedoch, dass ein solcher Test auf einer Teilmenge von Endpunkten als Teil von periodischen Leistungstests wertvoll wäre. Daher bin ich immer noch daran interessiert, einen relativ einfachen und wiederholbaren Test dafür zu finden. –