Тест Django для использования существующей базы данных - PullRequest
17 голосов
/ 06 июня 2011

Мне сложно настроить поведение настройки тестовой базы данных. Я хотел бы добиться следующего:

  • Наборы тестов должны использовать существующую базу данных
  • Набор тестов не должен стирать или воссоздавать базу данных, вместо этого загружать данные из дампа mysql
  • Поскольку БД заполняется из дампа, никакие приборы не должны загружаться
  • По окончании испытаний база данных не должна быть уничтожена

Мне трудно заставить тестировщика обойти создание.

Ответы [ 3 ]

5 голосов
/ 08 мая 2016

Перенесемся в 2016 год, и в django встроена возможность сохранять базу данных между тестами.Он доступен в виде - оставьте флаг для manage.py

Новое в Django 1.8.Сохраняет тестовую базу данных между тестовыми прогонами.Преимущество этого состоит в том, что вы пропускаете действия создания и уничтожения, что может значительно сократить время выполнения тестов, особенно в большом наборе тестов.Если тестовая база данных не существует, она будет создана при первом запуске, а затем сохранена для каждого последующего запуска.Любые непримененные миграции также будут применены к тестовой базе данных перед запуском набора тестов.

Это в значительной степени удовлетворяет всем критериям, которые вы упомянули в своих вопросах.На самом деле это даже идет еще дальше.Нет необходимости импортировать дамп перед каждым запуском.

3 голосов
/ 06 июня 2014

Этот TEST_RUNNER работает в Django 1.3

from django.test.simple import DjangoTestSuiteRunner as TestRunner

class DjangoTestSuiteRunner(TestRunner):
    def setup_databases(self, **kwargs):
        pass

    def teardown_databases(self, old_config, **kwargs):
        pass
0 голосов
/ 20 сентября 2013

Вам потребуется предоставить пользовательский тестовый прогон.

Биты, которые вы хотите переопределить по умолчанию django.test.runner.DiscoverRunner, это методы DiscoverRunner.setup_databases и DiscoverRunner.teardown_databases.Эти два метода связаны с созданием и уничтожением тестовых баз данных и выполняются только один раз.Вы захотите предоставить параметры проекта для конкретного теста, которые будут использовать существующую тестовую базу данных по умолчанию, и переопределить их, чтобы данные дампа загружались и база данных теста не уничтожалась.

В зависимости от размера и содержимогобезопасного дампа может быть просто создать подпроцесс, который будет направлять дамп в интерфейс командной строки SQL вашей базы данных, в противном случае вы сможете получить курсор и выполнить запросы напрямую .

Если вы хотите полностью избавиться от загрузки приборов, вы можете предоставить собственный базовый тестовый пример, который расширяет стандартное значение Django django.test.testcases.TestCase, а методы TestCase._fixutre_setup и TestCase._fixutre_teardown переопределяются, чтобы быть noop.

Caveat emptor: этот бегун сделает невозможным упрощение тестов для чего-либо, кроме источников вашего приложения.Можно настроить бегун для создания определенного псевдонима для подключения к существующей базе данных и загрузки дампа, а затем предоставить специальный тестовый пример, который переопределяет TestCase._database_names, чтобы указать его псевдоним.

...