2016-09-03 2 views
1

DRFで調整をテストする適切な方法は何ですか?私はネット上でこの質問に対する答えを見つけることはできません。私は各エンドポイントがカスタムリクエスト制限(ScopedRateThrottle)を持っているので、各エンドポイントごとに別々のテストをしたいと思います。DRFでスロットルをテストする適切な方法は何ですか?

重要なことは、他のテストに影響を与えることができないことです。スロットルや制限なしで何とか実行する必要があります。

+1

あなた自身に尋ねなければならない最初の質問:コードをテストしていますか?通常、単体テストで第三者コードをテストするのは意味がありません。それが第三者の仕事です。統合と動作テストでそれらをテストすることができます。あなたは、あなたがしたいテストの種類について何も書いていませんでした。 –

+0

ありがとう、ありがとう@KlausD。、私はそれをテストするつもりはない。 – Glen

+0

ローカルユニットテストやCIテストスイートにこのようなテストを含めることはおそらく意味がありません。しかし、私はそのようなテストは、エンドポイントのサブセットで、定期的なパフォーマンステストの一部として価値があると思う。だから私はまだこれについて合理的に単純で繰り返し可能なテストを理解することに興味があります。 –

答えて

2

すでに言及した人と同じように、これはまさにユニットテストの範囲内に収まっていないが、それでも、方法については、単にこのような何かやって:、、また

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) 

を副作用のあなたの懸念についてsetUpまたはsetUpTestDataでユーザー作成を行う限り、テストは(必要に応じて)分離されるため、その意味で「汚い」データまたはスコープについて心配する必要はありません。

cache clearing between testsについては、tearDowncache.clear()を追加するか、specific key defined for throttlingを試してクリアします。

関連する問題