Тестирование бд с помощью Testcontainers

Testcontainers – open-source фреймворк, позволяющий развернуть одноразовый экземпляр бд в Docker контейнере.

Контейнеры создаются/запускаются перед выполнением тестов и останавливаются/удаляются после выполнения всех тестов.

Для этого либа присваивает специальную метку при создании и запуске контейнеров и за кулисами использует Ryuk Container для удаления контейнеров с этой меткой после завершения процесса JVM, выполняющего тесты.

Материалы:

Подключение с использованием PostgreSQL:

Разворачивать и удалять экземпляр бд в контейнере докера для каждого тестового класса (и тем более для каждого теста) слишком ресурсозатратно. По-хорошему нужно, чтобы экземпляр БД был автоматически создан 1 раз перед запуском любого теста, и удален при завершении всех тестов.

Для этого можно сохранить созданный экземпляр контейнера как Singleton (см. Using Singleton Containers). Другими способами (через Extension annotations, JUnit5 BeforeAllCallback и др.) “из коробки” лично у меня не получилось сделать один единственный запуск контейнера для всех тестовых классов. Можно было добавить проверку с использованием AtomicBoolean и т.п., но стоит ли оно того.

Т.е. создаете контейнер в статической области памяти с указанием имени образа в докере, где крутится субд (в данном примере PostgreSQL), сразу запускаете (создаете) его и подключаетесь к только что созданной бд. Вызывать удаление контейнера не нужно, это либа берет на себя.

По-умолчанию либа создает бд со “случайным” именем, логином, паролем и т.п. (их значения можно узнать после создания контейнера), но можно задать и свои.

Также, существует экспериментальный флаг reusable, при включении которого повторные запуски контейнера (.start()) автоматически будут осуществляться с одинаковыми параметрами, т.е. не будут меняться от запуска к запуску (пока вручную не вызовешь .stop()). 

Ниже пример:

  • с указанием собственных параметров запуска (в т.ч. портов, что НЕ рекомендуется делать, но иногда может понадобиться)
  • с использованием подключения к бд через JDBC-коннектор HikariCP
  • с запуском механизма миграции бд с помощью Flyway

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *