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_1test_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 并行测试:测试进程错误地访问测试数据库的主要内容,如果未能解决你的问题,请参考以下文章

WEB各类常用测试工具

如何在并行 JVM 进程(不是线程)中运行 TestNG 测试

使用 pool.apply_async 测试 ML 模型的并行处理不允许访问结果

单元测试

如何一个接一个地运行 Specflow 测试而不是并行

python多进程并行执行和顺序执行的时间测试