如何在运行集成测试之前启动tomcat?

时间:2012-01-17 11:01:23

标签: java-ee maven continuous-integration automated-tests integration-testing

我正在尝试在单独的maven配置文件中运行集成测试,所以我需要按照以下步骤进行:

  1. 运行tomcat服务器。
  2. 运行Selenium服务器。
  3. 运行集成测试。
  4. 我按如下方式运行集成测试:

    mvn install -Pit
    

    但是发生的情况是集成测试在服务器启动之前首先运行,这将导致测试失败,以下是我的配置:

    <profile>
              <id>it</id>
              <build>
               <plugins>
    
    
            <plugin>
    
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.1.4</version>
                <configuration>
    
                    <wait>false</wait> 
                    <container>
                     <containerId>tomcat7x</containerId>
                     <home>${env.CATALINA_HOME}</home>  
                     <timeout>300000</timeout>                  
                    </container>
    
                    <configuration>
                     <type>standalone</type>
                     <home>target/tomcat7x</home> 
                     <properties>
                      <cargo.jvmargs>-XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled</cargo.jvmargs>
                    </properties> 
                    </configuration>
    
    
    
                </configuration>
                    <executions>
                        <execution>
                        <id>start-container</id>
                        <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                                <goal>deploy</goal>
                            </goals>
                        </execution>
                        <execution>
                        <id>stop-container</id>
                        <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
              </plugin> 
    
    
    
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>selenium-maven-plugin</artifactId>
                  <executions>
                        <execution>
                        <id>start</id>
                        <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start-server</goal>
                            </goals>
                        <configuration>
                            <background>true</background>
                            <logOutput>true</logOutput>
                        </configuration>
                    </execution>
    
                    <execution>
                    <id>stop</id>
                    <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop-server</goal>
                            </goals>
                    </execution> 
                </executions>
        </plugin>
    
    
                 <plugin>
    
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.8</version>
    
                    <configuration>
                        <junitArtifactName>
                        org.junit:com.springsource.org.junit
                        </junitArtifactName>
                        <excludes>
    
                            <exclude>**/unit/*Test.java</exclude>
                        </excludes>
                    </configuration>
    
    
                    <executions>
                        <execution>
    
                        <id>integration-tests</id>
                        <phase>integration-test</phase>
                            <goals>
                                <goal>test</goal>
                            </goals>
                        <configuration>
                        <skip>false</skip>
                        <excludes>
                            <exclude>none</exclude>
                        </excludes>
    
                        <includes>
                           <include>**/integration/*Test.java</include>
                        </includes>
                        </configuration>
                        </execution>
                </executions>
    
                    </plugin>
                  </plugins>
                </build>
    
                <activation>
                  <property>
                    <name>it</name>
                  </property>
                </activation>
    
            </profile>
    

    请告知我的配置有什么问题。

    更新:Maven日志

    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building My APP
    [INFO]    task-segment: [install]
    [INFO] ------------------------------------------------------------------------
    [INFO] [jaxws:wsimport {execution: default}]
    [debug] execute contextualize
    [INFO] [resources:resources {execution: default-resources}]
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 7 resources
    [INFO] [compiler:compile {execution: default-compile}]
    [INFO] Nothing to compile - all classes are up to date
    [debug] execute contextualize
    [INFO] [resources:testResources {execution: default-testResources}]
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 5 resources
    [INFO] [compiler:testCompile {execution: default-testCompile}]
    [INFO] Nothing to compile - all classes are up to date
    [INFO] [surefire:test {execution: default-test}]
    [INFO] Surefire report directory: C:\Workspace\MyAPP\target\surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running integration.MyTest
    

    UPDATE3

    使用以下内容删除旧的surefire插件后,它工作正常:

    <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <executions>
    
                        <execution>
                            <id>default-test</id>                                
                            <configuration>
                                <skipTests>true</skipTests>
                            </configuration>
                        </execution>
    
                        <execution>
                            <id>surefire-it</id>
                            <phase>integration-test</phase>
                            <goals>
                                <goal>test</goal>
                            </goals>
                            <configuration>
                                <includes>
                                    <include>**/integration/*Test.java</include>
                                </includes>
                                <skipTests>false</skipTests>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine>
                    </configuration>
                </plugin>
    

    但是货物插件存在问题,是它部署war文件然后运行集成测试,在调用任何测试方法之前它取消部署war文件??

1 个答案:

答案 0 :(得分:2)

根据日志,很明显失败是因为surefire正在test阶段而不是integration-test阶段运行集成测试。

This link说,如何仅使用surefire进行集成测试。

This documentation提供了有关maven和集成测试最佳实践的更多见解。