Использование pytest с докеризированной базой данных Postgres

В настоящее время я создаю отдельную базу данных для своих тестов. Есть ли лучшее решение для запуска набора тестов, когда база данных работает в Docker, и я не хочу, чтобы мои тесты испортили мою производственную базу данных?

Я думаю, что «лучше» слишком широко, можете ли вы подробнее рассказать о конкретной проблеме, с которой вы столкнулись?

hoefling 09.11.2022 22:33

@hoefling для моего проекта мне пришлось создать новую базу данных, выполнить миграцию с помощью перегонного куба, а затем я мог запустить свой тест. это было на моей локальной машине. но для моего конвейера CI / CD я понятия не имею, как выполнить этап тестирования без этой ручной процедуры. поэтому я ищу «лучшее» решение, чтобы избежать этого. что я имею в виду, что я должен делать вместо этого?

Hossein Gholami 12.11.2022 08:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
118
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы уже используете докеризованную базу данных в качестве «производственной базы данных». Вы можете добавить вторую докеризованную базу данных в качестве «базы данных разработки». Этот второй экземпляр должен реплицировать производственную базу данных и запускаться/отключаться как часть набора тестов.

Преимущества использования докеризированных экземпляров базы данных как части тестовой среды

  1. Гарантирует, что среда разработки имитирует производство

  2. Позволяет протестировать миграцию базы данных перед развертыванием в рабочей среде.

  3. Позволяет тестировать запросы перед их запуском в продакшн

  4. После настройки обслуживание может быть проще, чем обслуживание фиктивных интерфейсов данных.

Преимущества имитации соединений с базой данных в тестовой среде

  1. Первоначальная настройка проще
  2. Меньший стек проекта (например, Docker потенциально не требуется)

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


С другой стороны, на дополнительный вопрос в комментариях ОП:

для моего конвейера CI/CD понятия не имею, как выполнить стадию тестирования без этой ручной процедуры [создать новую базу данных и выполнить миграцию]

Вообще говоря, предлагаемый подход будет заключаться в следующем:

  1. Объедините любой необходимый докеризированный интерфейс в docker-compose.yml
  2. Создайте точку входа (это может быть функция Python), которая создает базу данных, запускает миграцию базы данных и загружает фиктивные данные в базу данных.
  3. Запустить тесты

Точные команды в CI могут выглядеть примерно так:

- docker-compose up  # Initialize database instance
- make dev-environment  # Call a Makefile recipe to create the database, run migrations and load mock data
- make tests  # Call a Makefile recipe to run the test suite

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

Hossein Gholami 26.11.2022 10:15

Вовсе нет, я бы сказал, что это рекомендуется и является стандартной практикой. Вот некоторые связанные ресурсы [1 ], [2 ], [3]

swimmer 26.11.2022 10:40

Другие вопросы по теме