Запуск exec-maven-plugin несколько раз за одну фазу - PullRequest
7 голосов
/ 10 февраля 2012

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

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

Шаги 1,2,4 и 5 будут использовать maven-exec-plugin. Шаг 3 будет использовать плагин maven-surefire.

Проблема в том, что все 5 из этих этапов будут выполняться в фазе «тестирования». Maven позволяет выполнять плагины в определенном порядке. exec-плагин может быть запущен несколько раз с использованием нескольких записей. Проблема в том, что мне нужно использовать плагин surefire в середине выполнения 4 exec-плагинов.

Кто-нибудь когда-нибудь сталкивался с этим раньше или знает, как структурировать плагин и его исполнение?

Ответы [ 2 ]

10 голосов
/ 13 февраля 2012

Так я настроил плагины exec и failsafe.Я использую отказоустойчивый, а не реконфигурирующий верный запуск, так как верный прогон все еще выполняет другие тесты, чтобы быть в фазе тестирования.Это позволит выполнить шаги 1 и 2 на этапе предварительного тестирования (несколько выполнений, перечисленных для одного этапа, будут выполняться в указанном порядке), выполнить тест на этапе тестирования интеграции, а затем выполнить очистку с помощью шагов 3 и 4 вфаза тестирования после интеграции.

(Примечание: у меня есть команды 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>
4 голосов
/ 11 февраля 2012

То, что вы пытаетесь сделать, больше похоже на интеграционный тест, чем на модульный тест. Для этого варианта использования жизненный цикл 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>
...