Ответ вслух Senior Тестирование в Spring обновлено

Почему тесты медленные

Вопрос

Тесты проекта на Spring идут 25 минут. Как будете ускорять?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала измеряю: какие классы самые медленные и сколько раз стартует контекст, это видно по логам старта Spring. Обычно главная причина в кеше контекста: в каждом классе свой набор @MockitoBean или свойств, плюс @DirtiesContext.

Что должно прозвучать в ответе

  • Посмотреть, сколько раз поднимается контекст

  • Унифицировать @MockitoBean и свойства, убрать лишние @DirtiesContext

  • Перевести тесты на слайсы и юнит-тесты

  • Один контейнер на весь прогон

  • Убрать sleep, параллелизм JUnit, разделение быстрых и медленных наборов

Что могут спросить следом

  • Чем опасен параллельный запуск тестов со Spring?
  • Как найти самые медленные тесты?

Разбор

Сначала измеряю: какие классы самые медленные и сколько раз стартует контекст, это видно по логам старта Spring. Обычно главная причина в кеше контекста: в каждом классе свой набор @MockitoBean или свойств, плюс @DirtiesContext. Выношу общую конфигурацию в базовые классы, чтобы контекст переиспользовался. Дальше перевожу тесты, которым не нужен весь контекст, на слайсы или юнит-тесты. Контейнеры базы и брокера делаю общими на прогон. Убираю Thread.sleep в пользу Awaitility. Если этого мало, разделяю быстрый набор для каждого коммита и медленный для слияния, включаю параллельный запуск классов там, где тесты не делят состояние.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.