Есть ли способ заставить фазу post-integration
всегда запускаться после фазы integration
? Всегда имею в виду появление тестовых сбоев во время фазы integration
.
Я запускаю приложение Angular / Springboot. Я использую транспортир для запуска тестов e2e, которые тестируют всю цепочку Angular + Springboot. Мне удалось интегрировать это в мою сборку Maven, чтобы я мог:
- настроить внутренний сервер Springboot
- настроить БД с начальными данными
- запустить транспортир во время
integration
phase
со следующими плагинами:
spring-boot-maven-plugin
, который запускает и останавливает тестовый сервер для интеграционного тестирования:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
...
</configuration>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
и frontend-maven-plugin
который запускает мои тесты транспортира во время фазы integration
:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
...
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<phase>generate-resources</phase>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
<execution>
<id>npm run integration tests</id>
<goals>
<goal>npm</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<arguments>run e2e</arguments>
<testFailureIgnore>true</testFailureIgnore> // this should probably be deleted
</configuration>
</execution>
</executions>
</plugin>
Я добавил testFailureIgnore = true
к frontend-maven-plugin
, потому что, если какой-либо тест транспортира не пройден, он остановит мою сборку maven до того, как он будет выполнен фаза post-integration
. Это заставляет тестовый сервер продолжать работать с этим портом. Любые последующие запуски не будут выполнены, поскольку порт уже используется, пока этот сервер не будет уничтожен (вручную). Свойство testFailureIgnore
позволяет игнорировать неудачные тесты при сборке, что позволяет мне продолжать фазу post-integration
.
Очевидным недостатком является то, что моя сборка будет печатать SUCCESS даже тогда, когда тесты не прошли. Я ищу поведение, похожее на плагин failsafe
, в котором неудачные тесты не пройдут мою сборку, но все равно сначала выполнит фазу post-integration
для правильной очистки.
Я не могу найти правильное решение для этого, но, конечно, я не могу быть первым, кто столкнулся с этой проблемой. Какие решения / альтернативы доступны для этого? Я предполагаю, что использование exec-maven-plugin
вместо frontend-maven-plugin
вызовет ту же проблему.