Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SnowOne 2025] Николай Шипяков: Интеграционные ...

[SnowOne 2025] Николай Шипяков: Интеграционные тесты. Приключение на 5 минут

Интеграционные тесты давно стали привычным инструментом в работе инженеров. Рекомендации по работе с ними зачастую выглядят слишком просто: «Просто подключите Testcontainers, и все заработает!». На учебных примерах это действительно так, но в реальных проектах все далеко не так гладко.

В докладе на конкретном примере разберем «типичный» REST-сервис: с походами в базу данных, HTTP-вызовами внешних сервисов и работой с брокером сообщений. Начнем с полного отсутствия тестов и шаг за шагом итеративно будем дорабатывать их, сталкиваясь все с новыми проблемами.

В конце оценим пройденный путь и попытаемся этот опыт масштабировать на реальный проект.

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

Видео: https://youtu.be/tYSHx6omtro

Avatar for jugnsk

jugnsk

May 08, 2025
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Почему про тесты? 6 делится проблемами и неудачами рассказывают истории

    успеха любят рассказывать про тесты Почти все Многие Мало кто
  2. Предметная область: книжный магазин 8 POST /bookstore/api/book - проверить книгу

    в РКН - добавить книгу в базу данных - отправить нотификацию подписчикам, в маркетплейсы
  3. Зачем они нам? 37 выявление ошибок на уровне взаимодействий улучшение

    качества тестов в целом … и кода условно дешевый контур
  4. Промежуточные впечатления Запустить БД в контейнере, прогнать скрипты миграции, стартануть

    Spring контекст Долгий запуск Не так уж и сложно, как изначально обещалось 56
  5. Промежуточные впечатления Запустить БД в контейнере, прогнать скрипты миграции, стартануть

    Spring контекст Долгий запуск Нужно следить за состоянием БД Не так уж и сложно, как изначально обещалось 57
  6. Промежуточные впечатления Запустить БД в контейнере, прогнать скрипты миграции, стартануть

    Spring контекст Долгий запуск Копипаста данных между тестами может сыграть злую шутку Данные для тестирования Нужно следить за состоянием БД Не так уж и сложно, как изначально обещалось 58
  7. Промежуточные впечатления Запустить БД в контейнере, прогнать скрипты миграции, стартануть

    Spring контекст Долгий запуск Копипаста данных между тестами может сыграть злую шутку Данные для тестирования Нужно следить за состоянием БД Liquibase, flyway … Без миграции БД никак Не так уж и сложно, как изначально обещалось 59
  8. Пусть каждый тест работает со своим топиком, тогда и гонки

    не будет Очевидно же! Каждому тесту по топику! 89
  9. Можно и так Мне не нравится Можно и так. Я

    не против Каждому тесту свой контекст со своими настройками. Сложно Пусть каждый тест работает со своим топиком, тогда и гонки не будет Очевидно же! Каждому тесту по топику! 90
  10. Можно и так Мне не нравится Можно и так. Я

    не против Тест должен тестировать, а не просто быть зеленым Пусть каждый тест работает со своим топиком, тогда и гонки не будет Очевидно же! Каждому тесту по топику! 91
  11. Промежуточные впечатления Помимо прочего запуск Kafka в контейнере Все еще

    долгий запуск Все еще нужно следить за состоянием Уже прям душненько, но терпимо 93 На этот раз того, что в топиках лежит, плюс гонка состояний
  12. Промежуточные впечатления Помимо прочего запуск Kafka в контейнере Все еще

    долгий запуск Добавляются проблемы с чтением чужих событий. Все сильно неочевиднее, чем было с БД Данные для тестирования Все еще нужно следить за состоянием Уже прям душненько, но терпимо 94 На этот раз того, что в топиках лежит, плюс гонка состояний
  13. Промежуточные впечатления Помимо прочего запуск Kafka в контейнере Все еще

    долгий запуск Добавляются проблемы с чтением чужих событий. Все сильно неочевиднее, чем было с БД Данные для тестирования Все еще нужно следить за состоянием Без базовых знаний далеко не уедешь Нужно знать Kafka Уже прям душненько, но терпимо 95 На этот раз того, что в топиках лежит, плюс гонка состояний
  14. Промежуточные впечатления Реально никакой сервер ни на каком порту не

    стартует Это все-таки mock Окей, но сомнительно 102
  15. Промежуточные впечатления Реально никакой сервер ни на каком порту не

    стартует Это все-таки mock Завязка на RestTemplate Окей, но сомнительно 103
  16. Промежуточные впечатления Реально никакой сервер ни на каком порту не

    стартует Это все-таки mock Не требуется много времени на изучения, не требуется время на старт Быстро и удобно Завязка на RestTemplate Окей, но сомнительно 104
  17. Промежуточные впечатления И MockWebServer, и MockRestServiceServer запускаются быстро Быстрый запуск

    Все еще нужно следить за состоянием Не все так однозначно 137 При параллельном запуске гонка состояний более чем реальна
  18. Промежуточные впечатления И MockWebServer, и MockRestServiceServer запускаются быстро Быстрый запуск

    Проблемы с чтением чужих ответов и размашистый диспетчер Данные для тестирования Все еще нужно следить за состоянием Не все так однозначно 138 При параллельном запуске гонка состояний более чем реальна
  19. Промежуточные впечатления Или почти никак. Все что мы могли сделать

    для замедления тестов мы уже сделали Никак не влияет на скорость Ну тут легкотня 145
  20. Промежуточные впечатления Или почти никак. Все что мы могли сделать

    для замедления тестов мы уже сделали Никак не влияет на скорость Ну тут легкотня 146 Никакого стейта Весь стейт остался на предыдущих шагах
  21. Промежуточные впечатления Или почти никак. Все что мы могли сделать

    для замедления тестов мы уже сделали Никак не влияет на скорость Ну тут легкотня 147 Никакого стейта Весь стейт остался на предыдущих шагах Можно проиграть при проверке Проверка дат – зачастую отдельная проблема
  22. Выводы Сама разработка тестов довольно трудоемка, выполнение сильно дольше юнит

    тестов Не быстро Достойный результат Хорошо делай, хорошо будет 149 Тесты более приближенные к реальности, нежели юнит; Плюс получаем рабочий контур, который можно использовать при разработке
  23. Выводы Обнаружение ошибок сильно сдвигается “влево”, хороши для регресса Используем

    в команде А как у нас? 153 QA за нас Не отнимаем хлеб у QA, а помогаем в решении вопроса качества со своей стороны
  24. Выводы Обнаружение ошибок сильно сдвигается “влево”, хороши для регресса Используем

    в команде А как у нас? 154 Чем раньше – тем проще Сильно сложнее внедрять такие тесты, когда уже много кода QA за нас Не отнимаем хлеб у QA, а помогаем в решении вопроса качества со своей стороны
  25. Выводы Обнаружение ошибок сильно сдвигается “влево”, хороши для регресса Используем

    в команде А как у нас? 155 Чем раньше – тем проще Сильно сложнее внедрять такие тесты, когда уже много логики; QA за нас Не отнимаем хлеб у QA, а помогаем в решении вопроса качества со своей стороны Не интеграционными только Юниты, “маленькие” интеграционные, системные