Тестирование Django 1.3 без пересоздания базы данных/загрузки фикстур для каждого запуска теста

Я использую django 1.3 и пишу некоторые модульные тесты selenium и django. Я хочу знать, возможно ли запускать тесты без создания баз данных и загрузки фикстур каждый раз?

Я наткнулся на этот поток SO, который дает хороший способ тестирования без создания база данных, но это по-прежнему очищает приборы базы данных и перезагружает их каждый раз. Я не хочу, чтобы даже это произошло. Я просто хочу, чтобы тесты читали/записывали базу данных, которую я настроил один раз. Я не хочу, чтобы он создавал базу данных/загружал приборы каждый раз, когда я запускаю какой-либо тест.

Я был бы рад предоставить любую дополнительную информацию, если это необходимо, чтобы разобраться в этом.

Заранее спасибо! :)


person Sandeep Raju Prabhakar    schedule 16.07.2013    source источник
comment
Это то, что вы ищите? Заголовок stackoverflow.com/questions/4606756/   -  person Ngenator    schedule 17.07.2013
comment
@Ngenator попробовал это, но я получаю некоторые ошибки, DatabaseError: relation "django_content_type" does not exist LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co...   -  person Sandeep Raju Prabhakar    schedule 17.07.2013
comment
Я не уверен, в чем проблема. На самом деле я не верю, что это хорошая идея, смысл каждый раз настраивать и отключать базу данных для согласованности. Тот факт, что вы планируете использовать существующую базу данных, может сделать некоторые из ваших тестов недействительными из-за того, что модели могут измениться, а данные могут оказаться недействительными в какой-то момент в будущем.   -  person Ngenator    schedule 17.07.2013
comment
Да, я понимаю. Но как я буду тестировать во время написания тест-кейсов, если на каждый прогон уходит много времени.   -  person Sandeep Raju Prabhakar    schedule 17.07.2013
comment
Вы можете запускать отдельные тесты docs.djangoproject.com/en/ dev/topics/testing/overview/ Просто убедитесь, что вы используете только те фикстуры, которые необходимы для тестов, нет необходимости заполнять базу данных бесполезной информацией, которая не имеет отношения к делу. Настройка и удаление базы данных не должно занимать так много времени, если это так, вы должны изучить это, возможно, что-то настроено неправильно. Кроме того, вы не должны писать тесты по принципу «попробуй, исправь, попробуй, исправь». Тесты, которые должным образом спроектированы заранее, должны быть очень простыми в реализации.   -  person Ngenator    schedule 17.07.2013


Ответы (1)


Я смог сделать это, взломав некоторый код django. Части, которые необходимо отредактировать,

ФАЙЛ: django/db/backends/sqlite3/creation.py

изменить код следующим образом:

  1. установка confirm = 'yes' в строке 55
  2. комментирование всех вхождений os.remove(test_database_name)

ФАЙЛ: django/db/backends/creation.py

изменить код следующим образом

  1. комментарий с 359 по 376 (часть syncdb и flush в функции create_test_db.
  2. почти все в _create_test_db. (почти все == часть кода, которая делает нежелательные вещи, которые мы пытаемся устранить)
  3. почти все в _destroy_test_db.
  4. почти все в destroy_test_db.

Надеюсь, это поможет!

person Sandeep Raju Prabhakar    schedule 19.07.2013