Доброго времени суток, коллеги!
Столкнулась с проблемой во время оптимизации тестов, надеюсь что кто-то сможет помочь советом, возможно кому-то уже приходилось с таким сталкиваться.
Суть следующая: есть большой проект, очень много тестов, разбитых по классам, в итоге имею примерно 10 классов в которых от 2-15 тестов. Появилась проблема в длительном выполнении.
Решила попробовать оптимизировать при помощи плагинов maven, потому что с его помощью сейчас организован запуск. Нашла плагин который называется maven-surefire-plugin . В нем есть такой параметр как parallel и настройки all, classes, methods, threadCount, threadCountClasses, threadCountMethods…
оф. документация плагина Maven Surefire Plugin – surefire:test
Пробовала много вариантов, по методам, по классам, по методам и классам.
Но каждый раз я сталкивалась с одной и той же проблемой - создается намного больше потоков чем я указываю.
Например я указываю распараллелить по методам (это в моем случае был бы лучший вариант, потому что по классам не будет такого эффекта, так как в одном классе может быть 1-2 теста в другом 15)
Я настраиваю запуск так
Пробовала с параметром threadCountMethods, аналогично и с классами…
Использую Junit 4.12
Но каждый раз запускается не 4 экземпляра, а штук 12. Компьютер виснет и ни о каком ускорении тестов естественно не идет и речи…
Не могу понять что я делаю не так, что я упускаю? возможно я не так поняла принцип? Почему запускается такое большое количество тестов?
Если кто-то сталкивался с таким помогите пожалуйста разобраться!
Заранее спасибо!!
Запуск тестов через maven test приводил запуску порядка 15 экземпляров хрома(в моем случае). При этом пока не отрабатывали все 15 запущенных тестовых метода, следующие методы не запускались. Т.е. тесты отрабатывали пачками по 15 в параллели. Параллельный запуск по методам у меня так и не получился.
Позже выяснилось, что параллельный запуск по методам не допустим для тестируемого приложения. В итоге я пришел к такой настройке:
If your tests specify any value for the parallel attribute and your project uses JUnit 4.7+, your request will be routed to the concurrent JUnit provider, which uses the JUnit JUnitCore test runner.
This is particularly useful for slow tests that can have high concurrency.
As of Surefire 2.7, no additional dependencies are needed to use the full set of options with parallel. As of Surefire 2.16, new thread-count attributes are introduced, namely threadCountSuites, threadCountClasses and threadCountMethods
Да, я пробовала распараллелить так же как и у вас, но у меня не получилось. По методам. Когда пробовала по классам у меня так же создавалось намного больше экземпляров чем я указывала.
Потом мне посоветовали попробовать форки. Это по сути то же распараллеливание по классам.
В итоге pom файл у меня стал выглядеть след. образом
И тогда получилось что у меня запусккается по 5 экземпляров. Но к сожалению это все жже по классам. Хотелось по методам, но пока это самый подходящий вариант
В serenity я пользовался только serenity-cucmber и там авторы фреймворка утверждают что параллелизм работает через threadCoint и работает только для junit. Хотя в serenity-cucmber тоже можно запускать параллельно тесты, только делать это приходится через forks, что является более ресурсоемким подходом