Django 1.7 представил миграцию баз данных .
При запуске модульных тестов в Django 1.7 он вызывает миграцию , которая занимает много времени. Поэтому я хотел бы пропустить миграции django и создать базу данных в конечном состоянии.
Я знаю, что игнорирование миграций может быть плохой практикой, поскольку эта часть кода не будет проверяться. Но это не так: я выполняю полные миграции на тестовом сервере CI (jenkins). Я только хочу пропустить миграции в моих локальных тестах, где важна скорость.
Некоторый контекст:
До Django 1.6 при использовании South я использовал настройку SOUTH_TESTS_MIGRATE :
По умолчанию команда South syncdb также применяет миграции, если она выполняется в неинтерактивном режиме, в том числе, когда вы выполняете тесты - она будет запускать каждую миграцию каждый раз, когда вы запускаете свои тесты.
Если вы хотите, чтобы средство выполнения тестов использовало syncdb вместо миграции - например, если ваши миграции слишком долго применяются - просто установите SOUTH_TESTS_MIGRATE = False в settings.py.
Однако syncdb больше не существует, теперь он переносится .
А из Django 1.8 я буду использовать параметр --keepdb :
Параметр --keepdb можно использовать для сохранения тестовой базы данных между тестовыми запусками. Это дает то преимущество, что пропускаются действия create и destroy, что значительно сокращает время выполнения тестов, особенно в большом наборе тестов. Если тестовая база данных не существует, она будет создана при первом запуске, а затем сохранена для каждого последующего запуска. Любые непримененные миграции также будут применены к тестовой базе данных перед запуском набора тестов.
Итак, этот вопрос ограничен Django 1.7.
источник
django-test-without-migrations
Пакет был очень удобно для меня, вы можете захотеть изменить принятый ответ на stackoverflow.com/a/28993456/200224Ответы:
Взгляните на этот обходной путь , опубликованный Берни Самптионом в списке рассылки разработчиков Django:
В Django 1.9 эта ситуация несколько улучшена , и вы можете установить значение
None
:MIGRATION_MODULES = {"myapp": Нет}
источник
myapp.migrations_not_used_in_tests
модуль не должен существовать.Вот конец моего файла настроек:
на основе этого фрагмента
Я отключил миграции только при запуске тестов
источник
__setitem__(self, *_)
метод, а потому что у нас были проблемы с приложениями , которые устанавливают свои собственные миграции какsettings.MIGRATION_MODULES['chroniker'] = 'db_migrations'
django-test-without-migrations добавляет
--nomigrations
флаг вmanage.py test
. Работает как шарм.источник
Обновление : неважно, это изменение было отменено до выхода финальной версии 1.10. Надеюсь, он вернется в будущей версии.
Обратите внимание, что начиная с Django 1.10 этим можно управлять с помощью настройки тестовой базы данных.
источник
https://gist.github.com/apollovy/22826f493ad2d06d9a9a22464730ce0b
источник
Для django 1.9 и выше ответ Гийома Винсента больше не работает, поэтому вот новое решение:
Я использую этот фрагмент в своем файле настроек после определения
INSTALLED_APPS
Он перебирает все установленные приложения и помечает каждое как не имеющее модуля миграции. Дополнительную информацию смотрите в документации по django .
Используя этот фрагмент, вы можете запускать свои тесты, задав переменную среды
TESTS_WITHOUT_MIGRATIONS
, например:источник
Я просто выяснил, как отключить миграции после django 1.10, может быть, это кому-то поможет. Вот ссылка на git
Миграция для django 1.10 состоит из двух частей, пожалуйста, посмотрите load_disk и рекордер
Часть
load_disk
для модели миграции приложения, которая будет добавлена вINSTALL_APP
И частьrecorder
для подключения к базе данных. Для версии до 1.9 нам нужно установить,MIGRATION_MODULES={'do.not.migrate':'notmigrations'}
когда вы запускаете тест. Теперь нам нужно установить это None likeMIGRATION_MODULES={'do.not.migrate':None}
Итак, если мы не хотим делать миграции для любого приложения , просто расширите dict и вернитесьNone
дляgetitem
функции, и сделайте то же самое вDATABASES
, это то, что вам нужно сделатьPS: Для команды вам необходимо указать
--setting=module.path.settings_test_snippet
послеtest
PPS. Если вы работаете сpycharm
, не устанавливайте--settings
параметры вRun/Debug configurations
, просто добавьте путьsettings_test_snippet.py
в разделе Пользовательские настройки. Это будет хорошо !!наслаждаться
источник