使用LocMemCache进行选择性Django pytest

时间:2016-03-22 03:36:43

标签: python django django-rest-framework pytest pytest-django

我有一个基于Django REST框架SimpleRateThrottle的自定义Throttling类,我想用pytest测试我的自定义类。由于我的默认测试设置使用DummyCache,我想只为这个特定的测试模块切换到LocMemCache(SimpleRateThrottle使用缓存后端来跟踪计数)。有没有办法切换缓存后端只是选择性测试?设置夹具中的settings.CACHE似乎不起作用。我也试过在SimpleRateThrottle中模拟default_cache,但我无法正确使用它。

naive_throttler.py

* * * * * 
| | | | | 
| | | | | 
| | | | +---- Day of the Week   (range: 1-7 or 0-6, 7/0 = Sunday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)

rest_framework / throttling.py

from rest_framework.throttling import SimpleRateThrottle

class NaiveThrottler(SimpleRateThrottle):
   ...

2 个答案:

答案 0 :(得分:2)

Django为此提供了override_settings and modify_settings装饰器。如果您只想为一个测试更改CACHES设置,则可以执行以下操作:

from django.test import TestCase, override_settings

class MyTestCase(TestCase):

    @override_settings(CACHES = {
                           'default': {
                              'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                           }
                      })
    def test_chache(self):
        # your test code

答案 1 :(得分:2)

虽然Django提供的函数/装饰器可以工作,但pytest-django提供了fixture for changing settings for a test。为了更好地遵循pytest using fixtures for tests的范例,最好更改特定于测试的设置,如下所示:

import pytest

def test_cache(settings):
    settings.CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        }
    }
    # test logic here