Как организовать e2e-тесты для приложения Spring с RDS в качестве хранилища

У нас есть приложение Spring Boot, которое использует службу RDS для хранения данных (в частности, PostgreSQL, VPC + частная подсеть) и Cognito для аутентификации пользователя. Весь этот джаз разворачивается в автоматизации (Jenkins + CloudFormation). Теперь у нас есть несколько тестов end2end, проверяющих, живо ли приложение. Вопрос в том, стоит ли нам идти дальше и пытаться протестировать функционал, требуя авторизации какого-нибудь тестового пользователя. Лично я бы предпочел, чтобы это было проверено, но есть некоторые препятствия, к которым я не знаю, как подойти.

  • Обычно при тестировании e2e вы хотели бы иметь чистую БД в начале каждого теста (или группы тестов) с похожими предварительными условиями. Для этого вы применяете снапшот с желаемым состоянием БД или просто удаляете все таблицы.

    Можно ли это сделать на АРМ (БД недоступна публично)? Должен ли я использовать команду RestoreDBInstanceFromDBSnapshot для этого или есть другие способы сделать это? Как предотвратить случай, когда схема БД изменилась, а мы все равно восстанавливаемся из старого снапшота?

  • У нас могут быть специальные конечные точки только для тестовой среды, но это не очень удобно, потому что портит код.


person quietbird    schedule 11.09.2019    source источник


Ответы (1)


  • Не уверен, как вы выпускаете свой выпуск, например, исправление приложения и базы данных одновременно или разные выпуски, в зависимости от того, есть ли изменения в базе данных. Так как от этого будет зависеть многое

  • Я предпочитаю, чтобы тест e2e очищал данные базы данных после них. Я имею в виду, что этот тест вставляет данные в базу данных и может быть методом демонтажа или может быть совершенно новым тестом, удаляющим все записи, созданные / для тестирования, и между этими двумя процессами вы можете выполнять свои обычные тесты.

  • Здесь я предполагаю, что вы следуете тестовой пирамиде, где тест e2e является самым медленным и меньшим по количеству по сравнению с системной интеграцией и модульным тестом.

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

  • Я бы предпочел, чтобы вы применили снимок с желаемым состоянием (здесь я имею в виду не предварительно заполненные данные тестирования, а только схему таблицы с требуемыми основными данными).

  • Если есть изменение схемы, вы все равно сделаете резервную копию существующей, примените новые изменения сценария для схемы, а затем запустите тест.

person amittn    schedule 11.09.2019
comment
Спасибо за ваш ответ! Вы применяли моментальные снимки на RDS? Как вы это сделали? - person quietbird; 13.09.2019
comment
@quietbird Я бы предпочел использовать restore-db-instance-to-point-in-time. Надеюсь, это полезно aws.amazon .com/blogs/database/ и актуальные документы. aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIT.html - person amittn; 13.09.2019