Django 并行测试:测试进程错误地访问测试数据库
Posted
技术标签:
【中文标题】Django 并行测试:测试进程错误地访问测试数据库【英文标题】:Django parallel testing: Test processes incorrectly accessing test databases 【发布时间】:2020-11-26 07:51:33 【问题描述】:我有一个本地运行的 Django 3.0.8 项目,连接到本地 PostgreSQL 数据库 (postgres:///myapp
)。当我运行python manage.py test
时,我的单元测试运行良好;一个名为test_myapp
的测试数据库会自动创建,并且可以正确访问。
但是,当我运行python manage.py test --parallel 8
时,测试失败了。我看到正确生成了 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
为什么我的并行测试进程没有正确访问它们各自克隆的测试数据库?
【问题讨论】:
您能否分享更多关于您如何配置数据库的信息?from django.conf import settings;print(settings.DATABASES)
@AmirHeshmati 这里是print(settings.DATABASES)
的结果:
"default": "NAME":"skale", "USER":"", "PASSWORD":"", "HOST":"", "PORT":"", "ENGINE":"django.db.backends.postgresql", "ATOMIC_REQUESTS":True, "AUTOCOMMIT":True, "CONN_MAX_AGE":0, "OPTIONS": "fallback_application_name":"django_shell" , "TIME_ZONE": “无”,“测试”:“CHARSET”:“无”,“COLLATION”:“无”,“名称”:“无”,“镜子”:“无”
我遇到了同样的问题。有什么建议吗?
【参考方案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 项目中设置多个数据库,你可以看到 this page 并使用它。
【讨论】:
以上是关于Django 并行测试:测试进程错误地访问测试数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在并行 JVM 进程(不是线程)中运行 TestNG 测试