Мне не нравится идея использовать другую базу данных (SQLite) для тестирования, поэтому мои модульные тесты используют ту же базу данных, что и производственное приложение - postgres.
Из коробки это делает создание / уничтожение базы данных самым медленным шагом при выполнении тестов.
Django 1.8 решит эту проблему с флагом - keepdb
Но мы еще не там, поэтому мы должны обойтись другими способами.
Вы можете использовать это для запуска ваших тестов без повторного создания базы данных. Оно работает.
Если вы заботитесь только о запуске тестов в командной строке, я предлагаю это.
В моем случае мне нравится использовать PyCharm IDE, и возможность запуска тестов с помощью щелчка правой кнопкой мыши по файлам / методам, безусловно, является плюсом для меня, поэтому мне пришлось пойти на ...
Решение 2) Трюк TEST_MIRROR.
В вашем файле settings.py
настройте вашу базу данных следующим образом:
if os.getenv('USE_TEST_DB') == '1':
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydbtesting',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': 'localhost',
'PORT': '5432',
'TEST_MIRROR': 'default',
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': 'localhost',
'PORT': '5432',
}
}
Итак, «mydb» - это база данных, которая будет использоваться для нормального выполнения, а «mydbtesting» - для тестов.
Параметр TEST_MIRROR
на самом деле не предназначен для этого, но дело в том, что если вы запускаете тесты с настроенной базой данных, Django не будет заново создавать / уничтожать, что мы и хотим.
Но сначала мы должны создать эту базу данных с чем-то вроде:
export USE_TEST_DB=1
./manage.py syncdb --migrate
Затем, когда вы хотите быстро запустить тесты, просто установите переменную окружения USE_TEST_DB
на «1».
Чтобы получить те же преимущества в Pycharm, вы можете перейти к Run / Debug Configurations, Defaults / Django тестам, затем к переменным окружения добавьте USE_TEST_DB = 1
UPDATE:
Пример приложения на Github: https://github.com/freedomsponsors/www.freedomsponsors.org/blob/099ec1a7a1c404eba287d4c93d58c8cf600b2769