如何在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' // 收集集成测试报告 } } } } } ...
关键说明
插件配置的作用:
- 让Surefire精准识别
*Test.kt单元测试类,Failsafe识别*IT.kt集成测试类 - 绑定Failsafe的执行阶段,确保集成测试结果被正确校验
- 适配Kotlin的模块路径,避免测试类加载失败
- 让Surefire精准识别
Jenkinsfile优化点:
- 添加
-DskipCompile=true -DskipTestCompile=true,完全复用Compile阶段的编译产物,避免重复编译 - 集成测试命令添加
-DskipTests=true,跳过Surefire的单元测试执行,防止重复跑单元测试 - 新增
post步骤收集测试报告,在Jenkins中直观展示测试结果
- 添加
内容的提问来源于stack exchange,提问作者tiefenauer
相关产品推荐
相关产品推荐

