Django测试随机选择数据库
Django test chooses database randomly
我有多个数据库设置(master/slave)如下:
DATABASES = {
'default': dj_database_url.parse('postgres://localhost:5432/master_db'),
'slave': dj_database_url.parse('postgres://localhost:5432/slave_db'),
}
从属数据库仅明确用于某些离线的昂贵查询(使用 objects.using
并且不用于任何测试用例。
如 django docs 'default' 中所述,当没有明确指定数据库时使用数据库。
问题是当我 运行 python manage.py test --keepdb
它有时 运行 测试 slave
数据库会引发错误(因为 table 在 slave
中创建数据库)。
python manage.py test --keepdb
使用slave
时的输出:
Using existing test database for alias 'slave'...
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "categorization_category" does not exist
LINE 1: ...rization_category"."last_modified_date" FROM "categoriz...
使用default
时的输出:
# some ..... and warnings showing tests are running
Creating test database for alias 'default'...
# some debug info in tests
Destroying test database for alias 'default'...
Ran 119 tests in 91.456s
OK
如何强制测试仅使用 'default' 数据库作为测试数据库?
将此添加到您的设置中:
DATABASES['slave']['TEST'] = {
'MIRROR': 'default',
}
Here 你可以读懂为什么。
我有多个数据库设置(master/slave)如下:
DATABASES = {
'default': dj_database_url.parse('postgres://localhost:5432/master_db'),
'slave': dj_database_url.parse('postgres://localhost:5432/slave_db'),
}
从属数据库仅明确用于某些离线的昂贵查询(使用 objects.using
并且不用于任何测试用例。
如 django docs 'default' 中所述,当没有明确指定数据库时使用数据库。
问题是当我 运行 python manage.py test --keepdb
它有时 运行 测试 slave
数据库会引发错误(因为 table 在 slave
中创建数据库)。
python manage.py test --keepdb
使用slave
时的输出:
Using existing test database for alias 'slave'...
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "categorization_category" does not exist
LINE 1: ...rization_category"."last_modified_date" FROM "categoriz...
使用default
时的输出:
# some ..... and warnings showing tests are running
Creating test database for alias 'default'...
# some debug info in tests
Destroying test database for alias 'default'...
Ran 119 tests in 91.456s
OK
如何强制测试仅使用 'default' 数据库作为测试数据库?
将此添加到您的设置中:
DATABASES['slave']['TEST'] = {
'MIRROR': 'default',
}
Here 你可以读懂为什么。