Тесты Джанго с SQLite
Я использую Postgres для производства и разработки, но я хотел бы использовать sqlite для запуска некоторых тестов. Я не вижу простого способа настроить один движок для тестов, а другой для разработки / производства. Я что-то упускаю?
4 ответов
добавьте в настройки следующие строки:
import sys
if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage
DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
убедитесь, что ваш фактический параметр базы данных доходит до них.
Это не прямой ответ, Но да, вам не хватает одной большой проблемы-тестирование приложения Postgres на SQLite сложно-они так разные. Я предлагаю вам скорее создать ram-диск (например, используя файловая система tmpfs) и создайте там свою тестовую базу данных Postgres. Это будет не так быстро, как SQLite, но, возможно, на порядок быстрее, чем обычная база данных Postgres, хранящаяся на HDD.
вы можете попробовать установку, аналогичную тому, что предлагается здесь Закари Voase: http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/
(весь пост-это полезно, но прокрутите вниз до раздела "Настройки" Для наиболее уместен.)
стратегия Зака-создать папку настроек и пометить ее как пакет python с помощью . Затем можно создать отдельный модуль для каждого типа развертывания, структурировано следующим образом:
settings/
|-- __init__.py # Empty; makes this a Python package
|-- common.py # All the common settings are defined here
|-- development.py # Settings for development
|-- production.py # Settings for production
|-- staging.py # Settings for staging
следуя этой концепции, вы можете настроить развертывание для postgres и отдельное развертывание для sqlite, а также разделить конфигурации для каждого по мере необходимости.
Я бы предложил использовать -k
или --keepdb
-флаг, под управлением manage.py test
и следующий параметр:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DBNAME',
'USER': 'DBNAME',
'PASSWORD': 'DBNAME',
'HOST': 'localhost',
'PORT': '',
'TEST': {
'NAME': 'DBNAME_test',
}
},
}
в моей настройке с Django==1.11 он работает как шарм. Удачи тебе!