Есть ли способ отделить долго работающие (например, стресс-тесты), чтобы они не запускались по умолчанию в Maven 2?
-
05-07-2019 - |
Вопрос
У нас возникла постоянная потребность в том, чтобы я не мог понять, как решить проблему с помощью стандартных инструментов и документации Maven 2.
У некоторых из наших разработчиков есть очень длительные тесты JUnit (обычно стресс-тесты), которые ни при каких обстоятельствах не следует запускать как обычную часть процесса сборки / ночной сборки.
Конечно, мы можем использовать механизм исключения для надёжного плагина и просто добавить их из сборки, но в идеале нам бы хотелось что-то, что позволило бы разработчику запускать их по желанию через Maven 2.
Решение
Обычно вы добавляете профиль в свою конфигурацию maven, который выполняет другой набор тестов:
запустите это с установкой mvn -Pintegrationtest
<profile>
<id>integrationtest</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-client -Xmx896m -XX:MaxPermSize=192m</argLine>
<forkMode>once</forkMode>
<includes>
<include>**/**/*Test.java</include>
<include>**/**/*IntTest.java</include>
</includes>
<excludes>
<exclude>**/**/*SeleniumTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<property>
<name>integrationtest</name>
</property>
</activation>
</profile>
Другие советы
Добавляя к ответу krosenvold , чтобы избежать непредвиденного поведения, убедитесь, что у вас также есть профиль по умолчанию, который по умолчанию активен и который исключает интеграцию, или стресс-тестирование вас хочу запустить в своем специальном профиле. Р>
<profile>
<id>normal</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/**/*IntTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
Вам нужно будет создать такой профиль, просто перечислив плагин surefire вне профиля, и он будет переопределен, если его выбрать с помощью:
mvn -P integrationtest clean install
Используйте подключаемый модуль для тестирования интеграции, такой как Thingy для тестирования Super Helpful Integration , чтобы отделить интеграционные тесты (длительные, системные) от модульного теста (пуристы говорят, что максимум 30 секунд для всех истинных модульных тестов) Создайте два Java-пакета для своих модульных тестов и интеграционных тестов.
Тогда не связывайте этот плагин с фазой (нормальный жизненный цикл maven) и запускайте его только тогда, когда он явно вызывается как цель, например:
mvn shitty: чистый дерьмо: установить дерьмо: тест
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>shitty-maven-plugin</artifactId>
</plugin>
</plugins>
Таким образом, ваши обычные разработчики не пострадают, и вы сможете запускать интеграционные тесты по требованию.
Другой вариант - провести стресс-тест, чтобы обнаружить, что он работает в Maven и выполняется только один или два раза. то есть превращается в обычный функциональный тест. Таким образом, вы можете проверить, что код по-прежнему хорош, но долго не запускается.