You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins中并行运行Kotlin Maven项目的单元与集成测试

解决方案:并行运行Kotlin项目的单元与集成测试

要实现无需重复编译、并行执行单元测试与集成测试,需要从Maven插件配置和Jenkinsfile优化两方面入手:

第一步:修正pom.xml插件配置

默认的Surefire和Failsafe插件不会自动识别Kotlin的.kt测试类,需要明确配置测试类匹配规则,并确保插件适配Kotlin环境:

<build>
    <plugins>
        <!-- Kotlin编译插件:确保主代码和测试代码被正确编译 -->
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>1.9.20</version> <!-- 替换为项目使用的Kotlin版本 -->
            <executions>
                <execution>
                    <id>compile</id>
                    <goals><goal>compile</goal></goals>
                    <configuration>
                        <sourceDirs><sourceDir>src/main/kotlin</sourceDir></sourceDirs>
                    </configuration>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <goals><goal>test-compile</goal></goals>
                    <configuration>
                        <sourceDirs><sourceDir>src/test/kotlin</sourceDir></sourceDirs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- Surefire插件:配置识别单元测试类(*Test.kt) -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.2.5</version> <!-- 使用最新稳定版 -->
            <configuration>
                <includes><include>**/*Test.kt</include></includes>
                <useModulePath>true</useModulePath>
            </configuration>
        </plugin>

        <!-- Failsafe插件:配置识别集成测试类(*IT.kt) -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.2.5</version> <!-- 与Surefire保持同版本 -->
            <configuration>
                <includes><include>**/*IT.kt</include></includes>
                <useModulePath>true</useModulePath>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

第二步:优化Jenkinsfile并行逻辑

核心是复用编译阶段的结果,避免重复编译,并确保并行执行时互不干扰:

// Jenkinsfile
...
stage("Compile") {
    steps {
        script {
            sh "./mvnw clean compile test-compile"
        }
    }
}

stage("Test") {
    parallel {
        stage("Unit Tests") {
            steps {
                script {
                    // 跳过编译步骤,直接运行单元测试
                    sh "./mvnw surefire:test -DskipCompile=true -DskipTestCompile=true"
                }
            }
            post {
                always {
                    junit '**/target/surefire-reports/*.xml' // 收集单元测试报告
                }
            }
        }

        stage("Integration Tests") {
            steps {
                script {
                    // 跳过编译和单元测试,仅运行集成测试并校验结果
                    sh "./mvnw failsafe:integration-test failsafe:verify -DskipCompile=true -DskipTestCompile=true -DskipTests=true"
                }
            }
            post {
                always {
                    junit '**/target/failsafe-reports/*.xml' // 收集集成测试报告
                }
            }
        }
    }
}
...

关键说明

  1. 插件配置的作用:

    • 让Surefire精准识别*Test.kt单元测试类,Failsafe识别*IT.kt集成测试类
    • 绑定Failsafe的执行阶段,确保集成测试结果被正确校验
    • 适配Kotlin的模块路径,避免测试类加载失败
  2. Jenkinsfile优化点:

    • 添加-DskipCompile=true -DskipTestCompile=true,完全复用Compile阶段的编译产物,避免重复编译
    • 集成测试命令添加-DskipTests=true,跳过Surefire的单元测试执行,防止重复跑单元测试
    • 新增post步骤收集测试报告,在Jenkins中直观展示测试结果

内容的提问来源于stack exchange,提问作者tiefenauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:35:44