使用Maven拆分单元和集成测试

使用Maven拆分单元和集成测试,maven,unit-testing,jenkins,testing,integration-testing,Maven,Unit Testing,Jenkins,Testing,Integration Testing,我正在Jenkins建立一个CD管道,我想在两个不同的步骤中运行我的单元测试和集成测试。计划是让我的管道脚本看起来像这样,并让它们单独运行: stage('Unit tests') { steps { withMaven(maven: 'Maven 3.6.2') { sh 'mvn test -P coverage' } } } stage('Integrat

我正在Jenkins建立一个CD管道,我想在两个不同的步骤中运行我的单元测试和集成测试。计划是让我的管道脚本看起来像这样,并让它们单独运行:

    stage('Unit tests') {
        steps {
            withMaven(maven: 'Maven 3.6.2') {
                sh 'mvn test -P coverage'
            }
        }
    }
    stage('Integration tests') {
        steps {
            withMaven(maven: 'Maven 3.6.2') {
                sh 'mvn test -P coverage'
            }
        }
我已经尝试使用这里描述的surefire插件:,运行“mvn测试”只运行单元测试,但“mvn集成测试”同时运行单元测试和集成测试

我也尝试过使用这里描述的故障保护插件:,但是“mvn verify”运行单元测试和集成测试,无论我输入哪个选项

如何让我的管道在两个不同的步骤中执行单元测试和集成测试

带surefire的Pom:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId> <!-- surefire plugin version managed by Spring Boot -->
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
            <executions>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skipTests>false</skipTests>
                        <includes>
                            <include>**/*Test.java</include>
                        </includes>
                    </configuration>
                </execution>
                <execution>
                    <id>integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skipTests>false</skipTests>
                        <includes>
                            <include>**/*IT.*</include>
                            <include>**/*Tests.*</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>

org.apache.maven.plugins
maven surefire插件
真的
单元测试
测试
测试
假的
**/*Test.java
集成测试
集成测试
测试
假的
**/*它*
**/*测试*
具有surefire和故障保护功能的Pom:

            <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.19.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>${surefire.skip}</skip>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

org.apache.maven.plugins
maven surefire插件
2.19.1
org.apache.maven.plugins
maven故障保护插件
2.19.1
org.apache.maven.plugins
maven编译器插件
3.6.1
1.7
1.7
org.apache.maven.plugins
maven故障保护插件
org.apache.maven.plugins
maven surefire插件
${surefire.skip}
集成测试
验证
这为我解决了问题:

下面是示例pom.xml,它与以下命令一起工作:

  • mvn clean verify-DskipUTs=true
    :仅运行集成测试(以“IT”结尾的测试)
  • mvn clean verify-DskipITs=true
    :仅运行单元测试(以“Test”结尾的测试)
  • mvn clean verify-DskipTests=true
    :跳过所有测试

    <build>
    <finalName>test-app</finalName>
    <plugins>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId> <!-- surefire plugin version managed by Spring Boot -->
            <configuration>
                <skipTests>${skipUTs}</skipTests>
            </configuration>
        </plugin>
    
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.0.0-M3</version>
            <executions>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
            </configuration>
        </plugin>
    
    </plugins>
    </build>
    
    
    测试应用程序
    org.apache.maven.plugins
    maven surefire插件
    ${skipUTs}
    maven故障保护插件
    3.0.0-M3
    运行集成测试
    集成测试
    集成测试
    验证
    ${skipTests}
    ${skippits}
    

能否提供示例pom.xml或更好的示例项目(带有示例代码)?为什么要将它们分开?应始终运行单元…有时可能需要单独运行集成测试,通常通过maven failsafe插件和使用
mvn clean verify-Prunt its
(仅当集成测试花费很长时间时配置文件)…不要使用maven surefire插件来运行集成测试…遵循惯例,使用单元测试名称
*Test.java
,而使用集成测试名称
*IT.java
(详细信息见文档)…不要以您目前的方式配置surefire,因为存在非常好的默认值…这在99.999%的情况下是正确的。每个构建都将运行单元测试和集成测试,但我们希望将它们分开,以便更好地控制失败的地方。正如我所写的……正确使用命名约定,您可以通过运行单元测试和通过
mvn clean verfiy
(可能是补充性的
-删减其
,以同时运行集成测试..不要将maven surefire插件绑定到集成测试部分这是针对maven failsafe插件的。。。