Запуск exec-maven-плагина несколько раз в одной фазе
Я пытаюсь протестировать клиент / серверное приложение и использовать Maven для обработки сборки/тестирования/развертывания. Чтобы протестировать приложение, мне нужно:
- запустите сценарий установки (для установки сервера),
- запуск команды запуска (для запуска службы),
- запустите тест (maven-surefire-plugin),
- остановить службу, и
- удалить службу.
шаги 1,2,4 и 5 будут использовать Maven-exec-plugin. Шаг 3 будет использовать maven-surefire-плагин.
проблема в том, что все 5 из этих шагов будут происходить в фазе "тест". Maven позволяет плагинам выполняться в определенном порядке. exec-plugin можно запускать несколько раз, используя несколько записей. Проблема в том, что мне нужно использовать плагин surefire в середине выполнения 4 exec-plugin.
кто-нибудь когда-либо сталкивался с этим раньше или знал, как структурировать плагин и выполнение?
2 ответов
то, что вы пытаетесь сделать, больше похоже на интеграционный тест, чем тест. Для этого случая использования жизненный цикл maven по умолчанию имеет три этапа, связанные с интеграционным тестированием:
-
pre-integration-test
: выполните действия, необходимые перед выполнением интеграционных тестов. Это может включать такие вещи, как создание необходимой среды. -
integration-test
: при необходимости обработайте и разверните пакет в среде, где интеграционные тесты могут быть бежать. -
post-integration-test
: выполните действия, необходимые после выполнения интеграционных тестов. Это может включать очистку окружающей среды.
плагин surefire обычно выполняется в test
фаза, но может быть перенастроена для выполнения в другой фазе. Ваши шаги 1 + 2 могут быть настроены для выполнения в pre-integration-test
, в то время как шаги 4 + 5 должны выполняться в post-integration-test
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- Skip execution in test phase and execute in integration-test phase instead -->
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>
вот как я настроил Exec и отказоустойчивые Плагины. Я использую failsafe, а не перенастраиваю surefire, так как surefire все еще запускает другие тесты, чтобы быть на стадии тестирования. Это выполнит шаги 1 и 2 в фазе pre-integrationtest (несколько исполнений, перечисленных для той же фазы, будут выполняться в указанном порядке), запустите тест на фазе integration-test, а затем очистите шаги 3 и 4 на фазе post-integrationtest.
(Примечание: у меня есть команды echo в место реальной установки и команды очистки)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
<configuration>
<forkMode>always</forkMode>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>step1</id>
<goals>
<goal>exec</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<executable>echo</executable>
<arguments>
<argument>foo</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>step2</id>
<goals>
<goal>exec</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<executable>echo</executable>
<arguments>
<argument>bar</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>step3</id>
<goals>
<goal>exec</goal>
</goals>
<phase>post-integration-test</phase>
<configuration>
<executable>echo</executable>
<arguments>
<argument>baz</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>step4</id>
<goals>
<goal>exec</goal>
</goals>
<phase>post-integration-test</phase>
<configuration>
<executable>echo</executable>
<arguments>
<argument>woot</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>