Выполнение тестов Django с помощью sqlite - PullRequest
30 голосов
/ 15 июня 2011

Я использую Postgres для производства и разработки, но я бы хотел использовать sqlite для запуска некоторых тестов. Я не вижу простого способа настроить один движок для тестирования, а другой для разработки / производства. Я что-то упустил?

Ответы [ 4 ]

42 голосов
/ 15 июня 2011

Добавьте следующие строки в ваши настройки:

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'

Убедитесь, что ваши фактические настройки базы данных предшествуют им.

6 голосов
/ 15 июня 2011

Это не прямой ответ, но да, вам не хватает одной большой проблемы - тестировать приложение Postgres на SQLite сложно - они , поэтому отличаются.Я предлагаю вам создать ram-диск (например, используя tmpfs ) и создать там свою тестовую базу данных Postgres.Это будет не так быстро, как SQLite, но, возможно, на порядок быстрее, чем обычная база данных Postgres, хранящаяся на жестком диске.

3 голосов
/ 21 июня 2011

Вы можете попробовать установку, аналогичную предложенной здесь Захарием Воазе: http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

(Весь пост полезен, но прокрутите вниз до раздела «Настройки» для наиболее важной части здесь)..)

Стратегия Зака ​​состоит в том, чтобы создать папку с настройками и пометить ее как пакет python, используя файл __init__.py.После этого вы можете иметь отдельный субмодуль для каждого типа развертывания, структурированный следующим образом:

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, а также отдельныеконфигурации для каждого по мере необходимости.

0 голосов
/ 28 марта 2018

Я бы предложил использовать -k или --keepdb -Flag при запуске 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 он работает как шарм.Удачи тебе!

...