Загрузка дампа SQL прежде, чем запустить тесты Django

У меня есть довольно сложный проект Django, который делает твердым/невозможным использовать приспособления для загрузки данных.

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

Я попробовал различное "волшебство" в MyTestCase.setUp (), но без удачи.

Любые предложения приветствовались бы. Спасибо.

9
задан knutin 30 December 2009 в 11:27
поделиться

3 ответа

Возможно, вам понадобится рассмотреть вопрос об определении пользовательского тестового бегуна. Здесь есть некоторая информация: https://docs.djangoproject.com/en/dev/topics/testing/advanced/#other-testing-frameworks

В основном, я думаю, что вы можете просто скопировать тестовый бегунок по умолчанию из django.test.simple.run_tests и затем изменить его в соответствии с вашими потребностями.

Раньше я этого не делал, но, насколько я понимаю, именно так можно это настроить.

1
ответ дан 4 December 2019 в 23:06
поделиться

Приспособления - лучший вариант. Вы пробовали использовать dumpdata ./manage.py для создания фиксации из вашей текущей базы данных? Я не видел такой ошибки на сложных моделях, но думаю, что это возможно.

Предположив, что вы используете mysql, вы должны быть в состоянии скриптировать это с помощью mysqldump.

.
-1
ответ дан 4 December 2019 в 23:06
поделиться

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 с помощью инструментов дампа для вашей базы данных.

  • SQLite [1]: echo '.dump' | sqlite3 yourdbname.sqlite> myapp / sql / mymodel.sql
  • MySQL [2]: mysqldump yourdbname> myapp / sql / mymodel.sql
  • PostgreSQL [3]: pg_dump yourdbname> myapp / sql / mymodel.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

7
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: