Django 单元测试故障转移域套接字

Posted

技术标签:

【中文标题】Django 单元测试故障转移域套接字【英文标题】:Django Unit tests fail over domain socket 【发布时间】:2020-02-05 20:48:06 【问题描述】:

我已将 Django 配置为通过本地 Unix 域套接字使用具有对等身份验证的数据库,而不是用户/密码身份验证。 这是设置。数据库:

'default': 'ENGINE': 'django.db.backends.postgresql',
             'NAME': 'mcps',
             'PORT': 5433,
             'TEST': 'ENGINE': 'django.db.backends.postgresql',
                      'NAME': 'mytestdb',
                      'PORT': 5433,
                      'USER': 'mcp',
             'USER': 'mcp'

端口配置正确,应用本身正常工作没有问题。

然而,当我尝试运行 pytest 并将环境变量 DJANGO_SETTINGS_MODULE 设置为上述设置时,会创建一个数据库 - 具有正确的所有者 'mcp' - 但在创建表之前我收到一个错误:

django.db.utils.OperationalError: FATAL:  Peer authentication failed for user "mcp"

单元测试有何不同之处,请问我该如何解决?

【问题讨论】:

您是否检查过设置HOST 是否解决了问题? 另外,请检查:***.com/questions/8167602/… 【参考方案1】:

@Nader Alexan 没有要设置的主机,通信通过本地 Unix 域套接字进行。我尝试添加

'HOST': '/run/postgresql'

正如我在 pgAdmin 中必须做的那样,但这并没有解决问题。

事实证明,pytest 也尝试访问名为“postgres”的数据库,即使维护数据库设置为 template1。我无法确定原因,但在 pg_hba.conf 中明确添加对该数据库的访问权限使我能够运行测试。

对不起,如果这个解释有点不稳定,我自己是用户名/密码以外的 PG 身份验证形式的新手。

【讨论】:

以上是关于Django 单元测试故障转移域套接字的主要内容,如果未能解决你的问题,请参考以下文章

Django单元测试测试视图问题,怎么解决

Django 单元测试 查看覆盖率

Django中的单元测试以及Python单元测试

单元测试

Django单元测试

Django 单元测试约束