如何为Django测试模拟redis

时间:2018-04-02 17:29:29

标签: django testing redis

我想在我的Django应用程序中模拟redis。我尝试了几种不同的方法,但似乎都没有。我做错了什么?

我的主要redis实例调用:

redis_client = redis.from_url(os.environ.get("REDIS_URL"))

该实例会在应用的其他部分导入,以便添加和检索数据。

在我的测试中,我尝试过:

import fakeredis
from mock import patch

class TestViews(TestCase):
    def setUp(self):
        redis_patcher = patch('redis.Redis', fakeredis.FakeRedis)
        self.redis = redis_patcher.start()

        self.redis.set('UPDATE', 'Spring')
        print(redis_client.get('UPDATE'))

    def tearDown(self):
        self.redis_patcher.stop

运行测试时,我希望设置'UPDATE'变量。但相反,每个redis_client实例都说服务器不可用。我如何模拟redis并设置值,以便在测试我的应用程序时它们可用?

2 个答案:

答案 0 :(得分:1)

你应该模仿一个使用它的项目,而不是来自它的地方。

所以如果在这样的视图中使用redis_client

<强>的myapp / views.py

from somemodule import redis_client

def some_view_that_uses_redis(request):
    result = redis_client(...)

然后在你的TestViews中,您应该像这样修补redis_client

class TestViews(TestCase):
    def setUp(self):
        redis_patcher = patch('myapp.views.redis_client', fakeredis.FakeRedis)
        self.redis = redis_patcher.start()

答案 1 :(得分:0)

首先,确保redis正在运行,在服务器insert_trade_sell = plpy.prepare(""" INSERT INTO trade_sell_tbl (account_name, trade_date, settlement_date, qty, symbol, price, fees, amount, dest_of_funds, note) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING sell_id """, ['text', 'date', 'date', 'numeric(9,4)', 'text', 'numeric(9,4)', 'numeric(9,2)', 'numeric(9,2)', 'text', 'text'] ); 中执行以下命令。

然后,如果您的redis已经在运行,请查看配置文件并确保它具有以下配置,redis-server或您需要允许连接的某个主机,您可以在编辑之后编辑redis.conf文件那,重新启动或重新加载redis服务。

如果您的应用在服务器redis之外运行,请确保在防火墙中打开redis服务器端口,默认端口为bind 0.0.0.0

某些时候,redis不允许与所有人建立联系,但是通过这些步骤,您可以更好地接触服务器。