Я использую JUnit 4.4 и Maven, и у меня есть большое количество длительных интеграционных тестов.
Когда дело доходит до распараллеливания наборов тестов, есть несколько решений, которые позволяют мне запускать каждый тестовый метод в одном тестовом классе параллельно. Но все это требует от меня того или иного изменения тестов.
Я действительно думаю, что было бы намного более чистым решением запустить X разных тестовых классов в X потоках параллельно. У меня есть сотни тестов, поэтому меня не волнует распараллеливание отдельных тестовых классов.
Есть какой-либо способ сделать это?
Начиная с junit 4.7, теперь можно запускать тесты параллельно без использования TestNG. На самом деле это стало возможным с версии 4.6, но в 4.7 внесен ряд исправлений, которые сделают это жизнеспособным вариантом. Вы также можете запускать параллельные тесты с помощью spring, о которых вы можете прочитать здесь
источник
Вдохновленный экспериментальным средством запуска ParallelComputer от JUnit, я создал свои собственные средства запуска ParallelSuite и ParallelParameterized . Используя эти бегуны, можно легко распараллелить наборы тестов и параметризованные тесты.
ParallelSuite.java
ParallelParameterized.java
Использование простое. Просто измените значение аннотации @RunWith на один из этих классов Parallel * .
источник
tempus-fugit предлагает нечто подобное, подробности смотрите в документации. Он основан на JUnit 4.7, и вы просто отмечаете свой тест
@RunWith(ConcurrentTestRunner)
.ура
источник
Вы можете проверить библиотеку с открытым исходным кодом - Test Load Balancer . Он делает именно то, что вы просите, - параллельно запускает разные тестовые классы. Это интегрируется на уровне ant-junit, так что вам ни в коем случае не нужно менять свои тесты. Я один из авторов библиотеки.
Кроме того, подумайте о том, чтобы не запускать их в потоках, поскольку вам может потребоваться песочница на уровне процесса. Например, если вы попадаете в базу данных в своих интеграционных тестах, вы не хотите, чтобы один тест завершился неудачно, потому что другой тест добавил некоторые данные в другой поток. В большинстве случаев тесты не учитывают это.
Наконец, как решили эту проблему до сих пор?
источник
TestNG может это сделать (это был мой первый рефлекс - потом я увидел, что у вас уже есть много тестов).
Для JUnit посмотрите parallel-junit .
источник
Вы можете запускать тесты параллельно, используя ParallelComputer, предоставляемый самим Junit. Вот небольшой фрагмент, с которого можно начать.
Это поможет, когда вам нужно запускать тесты из кода, поскольку он не зависит от Maven или других инструментов управления сборкой.
Обратите внимание, что при этом все тестовые примеры будут запускаться параллельно, если у вас есть какие-либо зависимости между разными тестами, это может привести к ложным срабатываниям. В любом случае вам НЕ СЛЕДУЕТ проводить взаимозависимые тесты.
источник
Другой вариант: Punner, новый параллельный модуль runner и maven. Вам не нужно менять свой код, скопируйте его в свой pom.xml:
Punner может запускать методы тестирования параллельно, может сохранять результаты тестов отдельно и в чистоте.
Punner уменьшит выходные данные консоли mvn, например:
Punner дает надежные совместимые результаты, вы также можете получить необработанные данные журнала и отчет в формате уценки из каталога отчетов:
Punner - это мой личный проект, я написал Punner, чтобы ускорить этап модульного тестирования некоторых других проектов, таких как инфраструктура IPC, детализированная блокировка, служба журналов, механизм распределенного рабочего процесса и т. Д. Это сэкономило мне много времени на ожидание.
Punner пока не поддерживает некоторые дополнительные функции. Я очень рад, если вы могли бы попробовать и дать мне несколько отзывов.
источник
Вы можете изменить свой тест на TestNg за минуту (вам просто нужно изменить импорт), TestNG - лучший вариант для параллельного тестирования.
источник
Вы можете попробовать Gridgain, который позволяет запускать и распределять тесты по вычислительной сетке.
источник