Используйте тестовую базу данных для встроенного тестирования Django с SQLAlchemy ORM - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть проект, работающий в Django и подключающийся к SQLAlchemy ORM через sessionmaker, как показано ниже. Он в основном обрабатывает методы http с указанным API (GET, POST, DELETE) и возвращает, публикует, обновляет или удаляет записи в БД.

from sqlalchemy import create_engine
from sqlalchemy.orm.session import sessionmaker

self.session = sessionmaker(
            bind=create_engine('mysql+pymysql://user:pw@127.0.0.1/db')

В myproject.settings Я использую значения по умолчанию, такие как 'ENGINE': 'django.db.backends.sqlite3',.

Я хотел бы проверить, работает ли API так, как задумано, просто просматривая все возможные методы и URI, которые, по-видимому, необходимы для тестирования. Тестирование выполняется с классом TestCase Джанго и его модулем Client. Работает вполне нормально.

Моя проблема : Это изменение (особенно удаление и обновление столбцов внутри) реального БД. Вместо того, чтобы использовать «созданный и уничтоженный test_db» в качестве выходных данных теста Django, это может указывать на то, что он использует настоящий db.

Я понимаю, почему (я обхожу встроенное db-соединение Django с моим соединением SQLAlchemy),но меня интересует , как это исправить, то есть с использованием истинного test_db.

  • В настоящее время я использую только для чтения mysql-пользователя для тестирования, но это мешает мнетестирование фактических запросов POST и DELETE.
  • Я мог бы попытаться использовать другую базу данных для тестирования путем мошенничества, но я бы предпочел другое решение (мне пришлось бы создавать фиктивную базу данных из реальной, каждый раз, когда я запускалтест)

PS: Если вы считаете, что я не предоставил достаточно кода, дайте мне подсказку. Но я чувствую, что люди могут получить представление о моей проблеме, и решение, вероятно, заключается в интеграции MySQL в Django, что мне еще не нужно было делать должным образом. Или, если быть более точным, я не мог работать каждый раз, когда пытался.

РЕДАКТИРОВАТЬ: При попытке настроить мою базу данных на

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',
        'USER': 'user',
        'PASSWORD': 'pw',
        'HOST': '127.0.0.1',
    }
}

я получаю django.db.utils.OperationalError: (2006, 'SSL connection error: SSL_CTX_set_tmp_dh failed'), что я из-за того, что я здесь не использую pymysql, я полагаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...