gpt4 book ai didi

python django 模拟缓存

转载 作者:太空狗 更新时间:2023-10-30 01:51:41 24 4
gpt4 key购买 nike

在我的 settings.py 中,我将缓存指定为:

 CACHES = {
'default': {
......
}
}

在我的 views.py 中,我有

import requests
from django.core.cache import cache, get_cache

def aview():
#check cache
if not get_cache('default').get('key'):
#make request and save in cache
result = request.get('some_url')
get_cache('default').set('key', result)
return result
else:
return get_cache('default').get('key')

现在在我的 tests.py 中,我已经能够模拟 requests.get('aurl'),这样可以确保没有发出外部请求。

但是测试代码仍然命中缓存并从中获取/设置。因此,如果我的产品已经设置了缓存,那么测试就会失败,因为它从同一个缓存中获取数据。或者,如果我先运行我的测试,那么测试用例会使用测试数据设置缓存,我在运行产品网站时看到同样的反射(reflect)。

我怎样才能模拟对

的调用
get_cache('default').set('key', result) 

get_cache('default').get('key') 

因此 set 调用不会设置真正的缓存(返回 None?)并且 get 不会返回实际缓存中的任何内容。

请向我提供如何完成此操作的代码示例。

这是我如何 mock 我的 requests.get

def test_get_aview(self):
with mock.patch('requests.get') as mymock:
mymock.side_effect = (lambda url: MOCKED_DATA[url])

我可以在这之后加上什么代码才能让它工作?我试过类似的东西

class MockCacheValue(mock.MagicMock):
def get(self, key):
print 'here'
return None
def set(self, key, value):
print 'here 2'
pass

def test_get_aview(self):
with mock.patch('requests.get') as mymock:
mymock.side_effect = (lambda url: MOCKED_DATA[url])
mock.patch('django.core.cache.get_cache', new=MockCacheValue)

但它不起作用,在上面的 get/set 中放置打印语句不会打印任何内容,这让我觉得它没有正确模拟

最佳答案

我认为你应该使用 dummy cache在通过以下方式运行测试时:

  • 覆盖测试用例中的设置,参见 docs

  • 在 settings.py 中测试时检查要使用的缓存后端:

      CACHES = ...
    if 'test' in sys.argv:
    CACHES['default'] = {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}
  • 有一个单独的 settings.py 用于测试

  • mock ,看好article如何做到这一点

希望对您有所帮助。

关于python django 模拟缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com