Nano Hash - криптовалюты, майнинг, программирование

Как издеваться над Redis в django, используя django-redis и mockredis

Redis настроен следующим образом в настройках django:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

CACHE_TTL = 3600

У меня есть следующий вид, который использует кеш Redis:

from django.core.cache import cache

class TestView(APIView):
    def post(self, request):
        serializer = TestSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            data = serializer.data
            # save new data to cache
            cache.set(data['title'], data, timeout=CACHE_TTL)
            return Response(data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

и у меня есть этот тест, который использует представление выше и использует кеш:

class MyTest(APITestCase):
    @patch('redis.StrictRedis', mock_strict_redis_client)
    def test_create(self):
        url = reverse('test-list')
        data = {'title': '77test'}
        response = self.client.post(url, data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(IP.objects.count(), 1)
        self.assertEqual(IP.objects.get().title, '77test')

Проблема в том, что он использует настоящий кеш Redis вместо фиктивного. Я просматриваю http://niwinz.github.io/django-redis/latest/#_testing_with_django_redis и https://github.com/locationlabs/mockredis и может не понимаю, что я делаю не так.


  • В общем, я бы посоветовал не использовать макет (на самом деле это подделка) Redis, потому что он всегда будет неполным в тонком смысле. 24.02.2019

Ответы:


1

Вы можете использовать django-fakeredis в django, чтобы легко имитировать djagno-redis.

В твоем случае:

from django_fakeredis.fakeredis import FakeRedis
....
@FakeRedis("yourview.cache"):
def test_create(self)
    ....

Если вы используете get_redis_connection, вы можете:

from django_fakeredis.fakeredis import FakeRedis
@FakeRedis("yourpath.get_redis_connection")
def test_foo():
    ...
28.07.2019
  • Только что использовал эту библиотеку сегодня, и я могу подтвердить, что ее очень легко использовать с моим бэкэндом DRF. Кстати, я был первым, кто отметил этот репозиторий :). Если @michael является сопровождающим, я хотел бы сказать, продолжайте в том же духе! 06.08.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..