Принудительно завершить фазу после интеграции после фазы интеграции - PullRequest
0 голосов
/ 30 марта 2020

Есть ли способ заставить фазу 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 вызовет ту же проблему.

1 Ответ

0 голосов
/ 31 марта 2020

Мне нигде не удалось найти достойного решения, поэтому я решил попробовать и создать свое собственное. Я расширил frontend-maven-plugin параметром, который регистрирует сбои интеграционных тестов на этапе integration-test, но дает сбой сборки только на этапе verify. Это позволяет завершить фазу post-integration-test до sh.

Мое решение доступно из моего репозитория (версия 1.9.1-failsafe). Эта реализация требует добавления параметра конфигурации integraTestFailureAfterPostIntegration . К сожалению, я не понял, как заставить выполнение Mojo запускать другое выполнение Mojo на более позднем этапе без вмешательства пользователя. Из-за этого пользователю необходимо иметь выполнение, которое запускается на этапе verify, даже если оно не делает ничего полезного функционально (ie. npm -version).

Мой рабочий пример:

<execution>
    <id>npm run integration tests</id>
    <goals>
        <goal>npm</goal>
    </goals>
    <phase>integration-test</phase>
    <configuration>
        <arguments>run e2e</arguments>
        <integrationTestFailureAfterPostIntegration>true</integrationTestFailureAfterPostIntegration>
    </configuration>
</execution>
<execution>
    <id>fail any integration tests</id>
    <goals>
        <goal>npm</goal>
    </goals>
    <phase>verify</phase>
    <configuration>
        <arguments>-version</arguments>
    </configuration>
</execution>

Если какие-либо ИТ-тесты не пройдены, они будут зарегистрированы на этапе integration-test и завершат сборку на verify. Если все ИТ-тесты пройдут, сборка будет успешной.

У меня есть открытый запрос на извлечение на frontend-maven-plugin, который может быть добавлен к версии 1.9.2. Я все еще буду пытаться улучшить изменения, устраняя необходимость добавления фазы выполнения verify вручную. Приветствуются предложения или улучшения запроса на получение!

ОБНОВЛЕНИЕ: я уже выпустил свою собственную версию на случай, если запрос на получение не поступит:

<dependency>
    <groupId>io.github.alexandertang</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>1.9.1-failsafe</version>
</dependency>

В этой версии Я добавил verify mojo, который упрощает второе выполнение:

<execution>
    <id>fail any integration tests</id>
    <goals>
        <goal>verify</goal>
    </goals>
    <phase>verify</phase>   <!--default phase is verify, so this is optional-->
</execution>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...