У меня есть довольно сложный проект Django, который делает твердым/невозможным использовать приспособления для загрузки данных.
То, что я хотел бы сделать, должно загрузить дамп базы данных из производственного сервера базы данных после того, как всем таблицам создал мольбу testrunner и прежде чем фактические тесты начнут работать.
Я попробовал различное "волшебство" в MyTestCase.setUp (), но без удачи.
Любые предложения приветствовались бы. Спасибо.
Возможно, вам понадобится рассмотреть вопрос об определении пользовательского тестового бегуна. Здесь есть некоторая информация: https://docs.djangoproject.com/en/dev/topics/testing/advanced/#other-testing-frameworks
В основном, я думаю, что вы можете просто скопировать тестовый бегунок по умолчанию из django.test.simple.run_tests и затем изменить его в соответствии с вашими потребностями.
Раньше я этого не делал, но, насколько я понимаю, именно так можно это настроить.
Приспособления - лучший вариант. Вы пробовали использовать dumpdata ./manage.py для создания фиксации из вашей текущей базы данных? Я не видел такой ошибки на сложных моделях, но думаю, что это возможно.
Предположив, что вы используете mysql, вы должны быть в состоянии скриптировать это с помощью mysqldump.
.Django поддерживает загрузку файлов SQL при выполнении syncdb, сброса или запуска средства выполнения тестов - это делает именно то, что вы описываете:
http: // docs.djangoproject.com/en/dev/howto/initial-data/#providing-initial-sql-data
Вам необходимо создать каталог «sql» в каталоге вашего приложения, а затем поместить файл с именем «mymodel. sql "в этом каталоге (где" MyModel "- соответствующее название модели).
myproject/
|--myapp/
|--sql/
|--mymodel.sql
Вы можете создать этот SQL с помощью инструментов дампа для вашей базы данных.
После сброса вам необходимо отредактировать файл, чтобы удалить все, кроме соответствующих операторов INSERT или других сложных вещей. В частности, вы должны удалить обработку транзакций, создание индекса и создание таблиц SQL, чтобы избежать ошибок при загрузке повторяющихся операторов create.
Я использую этот метод для загрузки действительно очень больших фикстур - обработка json занимает слишком много времени, но прямой импорт sql довольно быстр.
Имейте в виду, что этот метод будет загружать sql для любого вызова synchdb, reset и т. Д. В дополнение к загрузке данных для средства выполнения тестов - поэтому вы не сможете иметь разные данные для разных тестовых случаев, и вам придется удалить файлы перед сбросом, если вы не хотите, чтобы они загружались обратно на ваш рабочий сервер.
[1] http://www.sqlite.org/sqlite.html
[2] http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
[3] http: //www.postgresql .org / docs / 8.1 / static / backup.html # BACKUP-DUMP