Как настроить testcontainers, чтобы оставить контейнер базы данных работающим в случае сбоя теста?

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

Есть ли способ настроить тестовые контейнеры, чтобы в случае сбоя теста контейнер базы данных оставался поблизости, чтобы помочь с отладкой?


person ams    schedule 04.07.2020    source источник


Ответы (1)


Да, вы можете использовать функцию повторного использования (в альфа-состоянии) Testcontainers, чтобы не отключать контейнер после теста.

Для этого вам нужны Testcontainers ›= 1.12.3 и согласие с файлом свойств ~/.testcontainers.properties

testcontainers.reuse.enable=true

Затем объявите свой контейнер для повторного использования:

static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
  .withDatabaseName("test")
  .withUsername("duke")
  .withPassword("s3cret")
  .withReuse(true);

и убедитесь, что не используете аннотацию JUnit 4 или JUnit 5 для управления жизненным циклом вашего контейнера. Лучше используйте одноэлементные контейнеры или запустите их внутри @BeforeEach для себя:

статический финал PostgreSQLContainer postgreSQLContainer;

static {
  postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
    .withDatabaseName("test")
    .withUsername("duke")
    .withPassword("s3cret")
    .withReuse(true);
 
  postgreSQLContainer.start();
}

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

Подробное руководство можно найти здесь.

person rieckpil    schedule 04.07.2020