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

Maven构建结果不符合预期问题求助

Maven构建结果不符合预期问题求助

兄弟,我之前升级JUnit5 + Cucumber7做并行执行的时候,也踩过类似的坑,结合你说的场景——10个feature文件各10个用例共100个,先帮你梳理下可能的问题点和实操解决办法:

一、先把核心配置对齐

Cucumber7是完全基于JUnit5平台运行的,所以首先得把依赖和并行配置做对:

  • BOM依赖要确保版本统一:pom.xml里的dependencyManagement一定要正确引入Cucumber和JUnit5的BOM,避免版本冲突:
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.cucumber</groupId>
          <artifactId>cucumber-bom</artifactId>
          <version>7.14.0</version> <!-- 换成你实际用的版本 -->
          <type>pom</type>
          <scope>import</scope>
        </dependency>
        <dependency>
          <groupId>org.junit</groupId>
          <artifactId>junit-bom</artifactId>
          <version>5.10.0</version> <!-- 对应你用的JUnit5版本 -->
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
  • JUnit5并行配置要到位:在src/test/resources下创建junit-platform.properties,配置并行规则:
    # 开启JUnit5并行执行
    junit.jupiter.execution.parallel.enabled = true
    # 按feature文件(类级别)并行执行
    junit.jupiter.execution.parallel.mode.default = concurrent
    junit.jupiter.execution.parallel.mode.classes.default = concurrent
    # 线程数设置为10,和你的feature文件数量匹配,避免线程浪费或竞争
    junit.jupiter.execution.parallel.config.strategy = fixed
    junit.jupiter.execution.parallel.config.fixed.parallelism = 10
    
    这里要注意:Cucumber的每个feature文件在JUnit5里会被当作一个测试类,所以classes.default设为concurrent才能让多个feature同时跑起来。

二、排查Maven Surefire插件的坑

Surefire是Maven跑测试的核心插件,配置不对直接导致并行失效:

  • 必须用高版本Surefire:至少3.0.0-M5以上,旧版本对JUnit5的并行支持有bug,我之前用3.0.0-M4就踩过坑,换成3.2.2就正常了:
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.2.2</version>
          <configuration>
            <!-- 只扫描你的Cucumber Runner类 -->
            <includes>
              <include>**/*CucumberRunner.class</include>
            </includes>
            <!-- 重点:别开Surefire自己的并行配置!和JUnit5的并行会冲突,导致线程混乱 -->
          </configuration>
        </plugin>
      </plugins>
    </build>
    

三、清理旧插件,避免冲突

你之前用的cucumber-jvm-parallel-plugin在Cucumber7里已经完全不需要了——现在是靠JUnit5的平台来做并行,这个旧插件的逻辑会和JUnit5的并行机制打架,导致用例重复执行、遗漏或者报告异常,一定要把它从pom.xml里彻底删掉。

四、线程安全问题别忽略

如果你的测试用例里有共享的资源(比如全局的测试数据、复用的浏览器实例),并行执行的时候肯定会出问题,比如用例失败、结果混乱。这时候要确保每个用例的上下文是独立的:

  • 用Cucumber的@BeforeEach和@AfterEach来初始化/销毁每个用例的专属资源,别用@BeforeAll或@AfterAll(这俩是类级别,并行时会被多个线程共享);
  • 如果是和Spring集成的测试,要把测试类的scope设为prototype,避免单例冲突。

最后给你个小建议:先别直接跑100个用例,先挑2个feature跑,确认并行正常了再逐步扩容到10个,这样更容易定位问题。

备注:内容来源于stack exchange,提问作者Azarudeen Asraff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:18:12