Django并行测试未创建数据库表

时间:2018-07-31 14:49:28

标签: django postgresql django-tests

我正在尝试使用以下命令并行运行Django测试:

python manage.py test myproject.myapp.tests --parallel=4 --keepdb

但是,出现以下错误:

...
File "/home/daniel/Envs/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "accounts_user" does not exist
LINE 1: INSERT INTO "accounts_user" ("password", "last_login", "is_s...
                    ^

表示未在Postgres测试数据库中创建表。根据需要,我创建了名为test_myproject_1test_myproject_2的数据库,依此类推,在pgAdmin中检查后,我发现表确实不存在。我的假设是在运行测试时自动创建表。

在单个线程上运行测试时,换句话说,当我不使用--parallel选项或当我使用--parallel=1(使用{ {1}}数据库。有人对问题可能有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题出在--parallel--keepdb的使用上,替代测试数据库不会迁移到当前状态。在没有--parallel的情况下运行--keepdb将会强制刷新测试数据库中的数据库架构。

(如果由于--keepdb而没有permission denied to create database无法运行,则需要检查数据库用户是否具有正确的权限。)

an open issue #26822和一个partial patch旨在解决此问题,但是一段时间没有任何活动了。另请参见the discussion on Django-developers mailing list