В настоящее время я создаю отдельную базу данных для своих тестов. Есть ли лучшее решение для запуска набора тестов, когда база данных работает в Docker, и я не хочу, чтобы мои тесты испортили мою производственную базу данных?
@hoefling для моего проекта мне пришлось создать новую базу данных, выполнить миграцию с помощью перегонного куба, а затем я мог запустить свой тест. это было на моей локальной машине. но для моего конвейера CI / CD я понятия не имею, как выполнить этап тестирования без этой ручной процедуры. поэтому я ищу «лучшее» решение, чтобы избежать этого. что я имею в виду, что я должен делать вместо этого?
Вы уже используете докеризованную базу данных в качестве «производственной базы данных». Вы можете добавить вторую докеризованную базу данных в качестве «базы данных разработки». Этот второй экземпляр должен реплицировать производственную базу данных и запускаться/отключаться как часть набора тестов.
Преимущества использования докеризированных экземпляров базы данных как части тестовой среды
Гарантирует, что среда разработки имитирует производство
Позволяет протестировать миграцию базы данных перед развертыванием в рабочей среде.
Позволяет тестировать запросы перед их запуском в продакшн
После настройки обслуживание может быть проще, чем обслуживание фиктивных интерфейсов данных.
Преимущества имитации соединений с базой данных в тестовой среде
Вообще говоря, я лично выбираю второй подход только для небольших проектов и трачу время на настройку надлежащей докеризованной локальной среды для любого среднего или крупного проекта.
С другой стороны, на дополнительный вопрос в комментариях ОП:
для моего конвейера CI/CD понятия не имею, как выполнить стадию тестирования без этой ручной процедуры [создать новую базу данных и выполнить миграцию]
Вообще говоря, предлагаемый подход будет заключаться в следующем:
docker-compose.yml
Точные команды в 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
спасибо за обстоятельную инструкцию. Судя по тому, что вы сказали, иметь отдельную базу данных для набора тестов — это неплохо или неприемлемо, верно?
Вовсе нет, я бы сказал, что это рекомендуется и является стандартной практикой. Вот некоторые связанные ресурсы [1 ], [2 ], [3]
Я думаю, что «лучше» слишком широко, можете ли вы подробнее рассказать о конкретной проблеме, с которой вы столкнулись?