Ускорение интеграционных тестов

Недавно я узнал об инструменте Zonky, который на одном из проектов позволил ускорить выполнение интеграционных тестов в среднем в 3.5-4 раза. Делать практически ничего не пришлось: подключил зависимость и добавил аннотацию.

Об инструменте

Если вы испытываете проблемы с долгим выполнением интеграционных тестов, пишете на Java/Kotlin, используете Spring (не обязательно) и Testcontainers, то сможете за пару часов повторить мой опыт и проверить эффективность использования Zonky в своём проекте.

У меня есть страсть — узнавать происхождение необычных слов. Оказалось, что зонки — искусственно созданные виды непарнокопытных. Гибрид зебры и осла, выведенный в XIX веке. На вид они мультяшно-миловидные, но свободолюбивые и упрямые. Впрочем, это уже совсем другая история. :)

Перед запуском интеграционных тестов Zonky создаёт и настраивает указанную embedded-базу данных и регистрирует её в качестве источника. Заявлена поддержка PostgreSQL, MSSQL, MySQL, MariaDB, H2, HSQLDB и Derby. Библиотека интегрирована со Spring, генераторами схемы данных Liquibase и Flyway, может работать без Docker (проверено для PostgreSQL). В основе реализации два ключевых момента: использование embedded-базы данных и оптимизация процессов её инициализации и восстановления. Для базового использования достаточно пометить тестовый класс аннотацией @AutoConfigureEmbeddedDatabase(provider = ZONKY).

О тестировании

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

Если с пирамидой тестирования всё нормально, то инструменты, подобные Zonky, скорей всего, не принесут желаемого ускорения. В этом случае лучше продолжать использовать популярный и проверенный временем Testcontainers. Если же тяжёлых интеграционных тестов с участием баз данных очень много, то Zonky поможет сэкономить время. Однако последнее я бы воспринимал как инвестицию: сэкономленное время лучше потратить на наведение порядка и выравнивание пирамиды тестирования.



Понравилась статья?

Посмею напомнить, что у меня есть Telegram-канал Архитектоника в ИТ, где я публикую материал на похожие темы примерно раз в неделю. Подписчики меня мотивируют, но ещё больше мотивируют живые дискуссии, ведь именно в них рождается истина. Поэтому подписывайтесь на канал и будем оставаться на связи! ;-)

Статьи из той же категории: