Maven将多次战争部署到嵌入式服务器以进行集成测试

时间:2012-06-21 16:08:51

标签: maven integration-testing maven-failsafe-plugin embedded-server

我在嵌入式服务器上为自己的集成测试运行maven war项目没有任何问题,但现在我需要运行多个战争并从另一个项目进行测试。

我想设置以下方案......

我在我的本地工作区中有两个Maven war项目,名为War1和War2。我想有一个第3个Maven项目WarIntegration,它只包含集成测试并执行以下操作:

  1. Packages War1
  2. Packages War2
  3. 启动嵌入式服务器
  4. 将两场战争部署到同一个嵌入式服务器
  5. 运行WarIntegration中包含的集成测试(将对War1和War2进行http调用)
  6. 停止嵌入式服务器
  7. 这可能吗?什么插件设置将实现这一目标? WarIntergration应该是什么类型的项目(包装)? War1和War2应该是WarIntegration或依赖项中的模块吗?是否所有配置都可以用于WarIntegration项目,还是必须分布在项目中?

    这类似于这个问题,除了我们必须使用由项目启动和停止的嵌入式服务器(可能在我们运行验证时),我们需要一个单独的项目进行集成测试: I have a multi-module Maven 2 POM that has two WARs, how can I configure it to deploy both wars prior to running tests?

2 个答案:

答案 0 :(得分:5)

我能够使用cargo-maven2-plugin实现这一目标。

对于任何有兴趣的人来说,以下是pom的相关部分......

...
<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>

答案 1 :(得分:2)

注意,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>

希望有所帮助!

相关问题