使用Maven进行单元和集成测试

时间:2019-10-16 12:46:55

标签: 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('Integration tests') {
        steps {
            withMaven(maven: 'Maven 3.6.2') {
                sh 'mvn test -P coverage'
            }
        }

我已经尝试过按以下所述使用surefire插件:https://dzone.com/articles/splitting-unit-and-integration-tests-using-maven-a,并且运行“ mvn测试”确实只运行了单元测试,但是“ mvn集成测试”同时运行了单元测试和集成测试。

我也尝试过使用故障安全插件,如下所述:Maven separate Unit Test and Integration Tests,但是无论输入什么选项,“ 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>

具有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>

1 个答案:

答案 0 :(得分:2)

这为我解决了问题

下面是示例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>