提问人:sunw 提问时间:8/6/2020 最后编辑:Paweł Pedrycsunw 更新时间:11/2/2022 访问量:1244
Django 并行测试:测试进程错误地访问测试数据库
Django parallel testing: Test processes incorrectly accessing test databases
问:
我有一个在本地运行的 Django 3.0.8 项目,连接到本地 PostgreSQL 数据库 ()。当我运行 时,我的单元测试运行良好;将创建一个名为“自动”的测试数据库,并正确访问该数据库。postgres:///myapp
python manage.py test
test_myapp
但是,当我运行时,测试失败。我看到 8 个克隆的数据库已正确生成 (, ,..., ),但我收到如下错误:python manage.py test --parallel 8
test_myapp_1
test_myapp_2
test_myapp_8
psycopg2.OperationalError: FATAL: database "myapp_3" does not exist
对于并行测试,数据库似乎访问不正确(尝试访问数据库而不是 )。我试图弄清楚我的本地配置是否有问题,但这就是我的基本配置中的全部内容:myapp_N
test_myapp_N
DATABASES = {
'default': env.db('DATABASE_URL', default='postgres:///myapp'),
}
DATABASES['default']['ATOMIC_REQUESTS'] = True
为什么我的并行测试进程无法正确访问其各自克隆的测试数据库?
答:
-1赞
Mohammadali Davarzani
11/3/2021
#1
要在 Django 项目上使用 PostgreSQL 数据库,您可以配置相同的数据库。
DATABASES = {
'default': {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": 'Table_name',
"USER": 'user_name',
"PASSWORD": 'password',
"HOST": 'localhost', # or 127.0.0.1
"PORT": '5432', #5432 is the default PostgreSQL port if you change it must change this port
}
}
为了在你的 Django 项目上设置多个数据库,你可以查看这个页面并使用它。
0赞
Dipen Dadhaniya
2/9/2022
#2
对我有用的一个简单的解决方案是在 中显式指定测试数据库名称,例如,settings.py
DATABASES = {
'default': {
...
'TEST': {
# Avoid naming it the same as your original database name.
# Otherwise, it will be used while testing (and even may get deleted).
'NAME': 'name_of_your_choice',
},
},
...
}
如果使用多个数据库,则可能需要对所有数据库执行此操作。
评论
from django.conf import settings;print(settings.DATABASES)
print(settings.DATABASES)