Python Django测试镜像数据库未接收数据
我正在尝试对Django应用程序进行一些测试。我在整个应用程序中使用数据库镜像进行一些读取。当我尝试测试这些部分时,通过在数据库中创建模拟数据,然后尝试读取它,数据似乎不在镜像数据库中,尽管配置为Python Django测试镜像数据库未接收数据,python,django,unit-testing,testing,Python,Django,Unit Testing,Testing,我正在尝试对Django应用程序进行一些测试。我在整个应用程序中使用数据库镜像进行一些读取。当我尝试测试这些部分时,通过在数据库中创建模拟数据,然后尝试读取它,数据似乎不在镜像数据库中,尽管配置为test\u mirror 用于测试的数据库配置如下所示: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'maindb', 'HOST': 'lo
test\u mirror
用于测试的数据库配置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'maindb',
'HOST': 'localhost'
},
'mirror1': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'maindb',
'HOST': 'localhost',
'TEST_MIRROR': 'default'
}
}
然后在我的测试中,我做了这样的事情(Foo是一个模型)
这让我感到困惑,因为我认为TEST\u MIRROR
的目的是直接调用镜像传递到默认值
如果您的设置包含多个数据库,并且您有一个测试
需要每个数据库,您可以使用
测试套件请求完全刷新
例如:
class TestMyViews(TestCase):
multi_db = True
def testIndexPageView(self):
call_some_test_code()
该文档()并不精确,因为条件multi_db(间接在_databases_names中)不仅用于Django源中的刷新(拆卸),而且还用于‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘。(Django-1.5.1/Django/test/testcases.py:834)因此,这似乎是一个独立于主/从设置的基本条件。我认为答案可能是: 当配置测试环境时,将显示从机的测试版本 无法创建。相反,与从属服务器的连接将重定向到 违约点
由于测试中不存在从机,因此尝试直接调用它会失败,这有点道理恐怕我不认为这是本例中的答案。我们在生产中有一种类似于主/从关系的关系(在Heroku上有一个“跟随者”db),但在进行本地开发时,我们只是将两者的db配置指向一个db。当测试构建环境时,它会创建每个现有数据库的
\u test
副本,但由于它在配置中看到两个副本,因此会尝试创建相同的副本两次。这就是TEST\u MIRROR
所解决的问题,因为它知道不为镜像创建db,但它似乎没有通知ORM将查询从镜像db传递到主机。我读到“相反,到从机的连接将重定向到默认点”,因为指向从机的任何东西都将传递到主机,因此,它似乎应该起作用。也许这只是一个我读错了的例子(在我看来,可以在文档中写得更清楚…)我不是官方消息来源,我明白你的意思,但我的理解是,这只发生在测试环境中
class TestMyViews(TestCase):
multi_db = True
def testIndexPageView(self):
call_some_test_code()