Ошибки при параллельном запуске тестов - PullRequest
1 голос
/ 19 февраля 2020

При попытке параллельного запуска тестов возникают многочисленные проблемы.

Согласно документам, перед именем "test_" указывается имя базы данных, указанное в DATABASES. Я использовал имя "postgres", поэтому база данных, созданная при выполнении тестов, называется test_ postgres. При параллельном выполнении тестов создаются следующие базы данных (что ожидается): test_postgres_1 , test_postgres_2 , test_postgres_3 и test_postgres_4 . Однако при запуске всех тестов с параметром --parallel=4 каждый тест завершается неудачно со следующим сообщением: django.db.utils.OperationalError: FATAL: database "postgres_x" does not exist где x может быть 1, 2, 3 или 4. Я вижу, что были созданы следующие базы данных: test_postgres_x где x может быть 1, 2, 3 или 4. Откуда берется "postgres_x"? Почему к ним не добавляется «test_»?

Кроме того, если я вручную создаю ожидаемые базы данных postgres_x (x = 1–4), миграции, примененные к «основной» базе данных, не применяется к клонам. Это приводит к таким ошибкам: django.db.utils.ProgrammingError: relation "users_user" does not exist. Примерно 1/4 теста проходит при использовании 4 ядер.

Наконец, если я пытаюсь мигрировать postgres_x с помощью migrate --database=postgres_x, я получаю: django.db.utils.ConnectionDoesNotExist: The connection postgres_x doesn't exist.

Я гарантировал, что все тесты изолированы только для того, чтобы я мог выполнять их параллельно. Что я должен делать?

1 Ответ

1 голос
/ 19 февраля 2020

Вместо того, чтобы собирать свой тестовый комплект самостоятельно, я предлагаю использовать pytest и pytest-django и pytest-xdist, это будет обрабатывать создание и миграцию БД для каждого параллельного работника. (pytest может запускать Django тесты UnitTest без изменений)

...