TestCase中的“ override_settings”不起作用

时间:2019-08-10 03:17:48

标签: django testcase

我在测试用例中使用了“ override_settings”,并且我想在测试用例中测试REST_FRAMEWORK的DEFAULT_THROTTLE_RATES。当我测试我的api时,它不起作用。

my settings.py:
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'anon': '60/min',
        'user': '500/hour',
        'custom': '200/day',
    }
}

test api:
@throttle_classes([AnonRateThrottle, UserRateThrottle])
def test_api(request):
    pass


TestCase:
    @override_settings(REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_RATES': {
            'anon': '600000/min',
            'user': '5000000/hour',
            'custom': '200000/day',
        }
    })
    def test_api(self):
        from rest_framework.settings import api_settings
        print(api_settings.DEFAULT_THROTTLE_RATES)
        print(api_settings.user_settings)
        from rest_framework.throttling import AnonRateThrottle, api_settings as throttling_setting

        print(AnonRateThrottle().get_rate())

        print(id(throttling_setting))
        print(id(api_settings))

        print(id(AnonRateThrottle().THROTTLE_RATES))
        print(id(api_settings.DEFAULT_THROTTLE_RATES))
        print(id(throttling_setting.DEFAULT_THROTTLE_RATES))

        url = 'api'
        for i in range(100000):
            response = self.client.get(url)
            self.assertEqual(response.status_code, 200)

我希望测试用例正常工作,但是它断言为429状态。 我打印的ID是“ apisetting”,“ DEFAULT_THROTTLE_RATES”,这是相同的,但是“ AnonRateThrottle”实例中的“ THROTTLE_RATES” ID是不同的,值也不相同。值是“ {'anon':'60 / min','user':'500 / hour','custom':'200 / day',}”。请帮助我,我快疯了。

1 个答案:

答案 0 :(得分:0)

drf的节流由缓存处理。我会清除所有使它起作用的请求的缓存。