Maven развертывает несколько войн на встроенном сервере для интеграционных тестов

У меня не было проблем с запуском проекта maven war на встроенном сервере для его собственных интеграционных тестов, но теперь мне нужно запустить несколько войн и протестировать из другого проекта.

Я хотел бы настроить следующий сценарий ...

У меня есть два военных проекта Maven в моем локальном рабочем пространстве под названием War1 и War2. Я хотел бы иметь третий проект Maven, WarIntegration, который содержит только интеграционные тесты и выполняет следующие функции:

  1. Пакеты War1
  2. Пакеты War2
  3. Запускает встроенный сервер
  4. Развертывает обе войны на одном встроенном сервере
  5. Запускает интеграционные тесты, содержащиеся в WarIntegration (который будет делать http-вызовы War1 и War2)
  6. Останавливает встроенный сервер

Это возможно? Какая установка плагина сделает это? Каким должен быть проект WarIntergration (упаковка)? Должны ли War1 и War2 быть модулями в WarIntegration или зависимостями? Может ли вся конфигурация быть добавлена ​​к проекту WarIntegration или ее нужно будет распределить по проектам?

Это похоже на этот вопрос, за исключением того, что мы должны использовать встроенный сервер, который запускается и останавливается проектом (возможно, когда мы запускаем verify), и нам нужен отдельный проект для интеграционных тестов: У меня есть мульти- модуль Maven 2 POM, который имеет две войны, как я могу настроить его для развертывания обеих войн перед запуском тестов?


person smp7d    schedule 21.06.2012    source источник
comment
Как вы запускаете / останавливаете встроенный сервер?   -  person Roy Truelove    schedule 21.06.2012
comment
Упаковка war1 и war1 должна выполняться самим проектом. Я бы предложил определить зависимость только от двух других проектов.   -  person khmarbaise    schedule 21.06.2012
comment
@Roy Truelove Я хотел бы присоединить запуск и развертывание к этапу предварительной интеграции, а завершение работы - к этапу после интеграции.   -  person smp7d    schedule 22.06.2012
comment
@khmarbaise Какой плагин / конфигурацию я могу использовать для развертывания двух войн на встроенном сервере? Какой царь упаковки должен использовать WarIntegration?   -  person smp7d    schedule 22.06.2012
comment
Это слайд-шоу slideshare.net/ wakaleo / говорит о том, что может быть полезно, начиная со слайда 29. Похоже, что Cargo, плагин для maven, может быть настроен с несколькими развертываемыми военными зависимостями. Вы можете использовать Cargo для запуска экземпляра tomcat, развертывания зависимостей WAR и затем запуска приемочных тестов.   -  person walnutmon    schedule 22.06.2012
comment
@walnutmon Спасибо, плагин Cargo сработал для того, что я пытался сделать.   -  person smp7d    schedule 25.06.2012


Ответы (2)


Я смог добиться этого с помощью плагина Cargo-maven2-plugin.

Вот соответствующие части помпона для всех, кому интересно ...

...
<groupId>com.test</groupId>
<artifactId>webapp-integration</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
...
<dependencies>
        ...
        <dependency>
            <artifactId>webapp1</artifactId>
            <groupId>com.test</groupId>
            <version>1.0</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>webapp2</groupId>
            <artifactId>com.test</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <container>
                        <containerId>jetty6x</containerId>
                        <type>embedded</type>
                    </container>
                    <configuration>
                        <type>standalone</type>
                        <properties>
                            <cargo.servlet.port>8085</cargo.servlet.port>
                        </properties>
                        <deployables>
                            <deployable>
                                <artifactId>webapp1</artifactId>
                                <groupId>com.test</groupId>
                                <type>war</type>
                                <pingURL>http://localhost:8085/testapp/</pingURL>
                                <properties>
                                    <context>testapp</context>
                                </properties>
                            </deployable>
                            <deployable>
                                <artifactId>webapp2</artifactId>
                                <groupId>com.test</groupId>
                                <type>war</type>
                                <pingURL>http://localhost:8085/testapp2/</pingURL>
                                <properties>
                                    <context>testapp2</context>
                                </properties>
                            </deployable>
                        </deployables>
                    </configuration>
                </configuration>
                <executions>
                    <execution>
                        <id>start-server</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop-server</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.12</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.12</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <groups>com.test.integration.IntegrationTestMarker</groups>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/*.class</include>
                            </includes>
                            <skipTests>false</skipTests>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
person smp7d    schedule 25.06.2012

Обратите внимание, элемент DEPLOYABLES является дочерним по отношению к плагину / конфигурации, а НЕ плагину / конфигурации / конфигурации.

Пример выше должен быть:

<plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <container>...</container>
                <configuration>
                    <type>standalone</type>
                    <properties>
                        <cargo.servlet.port>8085</cargo.servlet.port>
                    </properties>
                </configuration>
                <deployables>
                     <deployable>
                            <artifactId>webapp1</artifactId>
                            <groupId>com.test</groupId>
                            <type>war</type>
                            <pingURL>http://localhost:8085/testapp/</pingURL>
                            <properties>
                                <context>testapp</context>
                            </properties>
                      </deployable>
                      <deployable>
                            <artifactId>webapp2</artifactId>
                            <groupId>com.test</groupId>
                            <type>war</type>
                            <pingURL>http://localhost:8085/testapp2/</pingURL>
                            <properties>
                                <context>testapp2</context>
                            </properties>
                      </deployable>
                 </deployables>
             </configuration>
        </plugin>
 </plugins>

Надеюсь, это поможет !

person Brice    schedule 30.10.2014