【问题标题】:Django parallel testing: Test processes incorrectly accessing test databasesDjango 并行测试:测试进程错误地访问测试数据库
【发布时间】: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”:“无”,“名称”:“无”,“镜子”:“无”} } }
  • 我遇到了同样的问题。有什么建议吗?

标签: python django testing


【解决方案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 并使用它。

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2015-09-07
    • 2023-03-13
    • 2018-03-25
    相关资源
    最近更新 更多