Как стать автором
Обновить

Комментарии 4

Добрый вечер, спасибо за статью. Тоже часто приходилось работать с Maven Reactor и большим кол-вом JUnit тестов. Но у меня не возникало проблем с распараллеливанием. Вы не могли бы объяснить проблему с параллельными запусками подробнее? Я использовал подход, что для каждого модуля отдельная job в Team City/Circle CI/GitLab и мы для модуля задаем количество потоков в Custom Strategy в JUnit 5 https://junit.org/junit5/docs/snapshot/user-guide/#writing-tests-parallel-execution-config

То есть вопрос в том, зачем запускать сборки по большому количеству модулей в одной Team City job? Одна команда автоматизаторов переиспользует тесты от нескольких других команд?

Доброго времени суток, спасибо за вопрос.
Есть несколько причин, почему запуск всех модулей в одной job в нашем случае лучше, чем запуски в отдельных jobs.

1. Для 250 модулей придется запускать 250 job, накладные расходы на поддерживание TeamCity агентов будет очень высоким.

2. Все команды работают над одним и тем же продуктом и часто запускают тесты друг друга. Изменение одного модуля иногда может влиять на 30 других модулей. Проще запустить все затронутые модули в одной сборке, чем запускать 30 сборок. (как мы вычисляем, какие модули были затронуты, можно прочитать здесь)

Если команды и их модули достаточно изолированы друг от друга ваше решение тоже хорошо подходит.

Скуповатая статья по сути про 1 параметр. У мавена есть еще про использование ядре ЦПУ.

На самом деле тесты медленно работают не из-за обрезанного использования ресурсов, а из-за постоянного форка\пересоздания JVM под запуск блока тестов.

Настоящую разницу вы почувствуете если обойдете эту проблема - тем же Apache Maven Daemon.

На личном опыте правильная организация структуры модулей и настройка потоков и ЦПУ не дает столько прироста по производительности тестов, как тот же mvnd.

Добрый день, спасибо за фидбек.

Не очень понял, что вы имеете ввиду. Насколько я знаю, Surefire по умолчанию использует одну JVM для всех тестов в одном модуле (ссылка). Можете пожалуйста объяснить, где происходит пересоздание JVM и какая именно особенность mvnd может помочь решить проблему?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий