Запуск exec-maven-плагина несколько раз в одной фазе

Я пытаюсь протестировать клиент / серверное приложение и использовать Maven для обработки сборки/тестирования/развертывания. Чтобы протестировать приложение, мне нужно:

  1. запустите сценарий установки (для установки сервера),
  2. запуск команды запуска (для запуска службы),
  3. запустите тест (maven-surefire-plugin),
  4. остановить службу, и
  5. удалить службу.

шаги 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>