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

IntelliJ中Java的Selenium+Cucumber:替换JUnit为TestNG

可以替换,Cucumber支持用TestNG作为运行器,具体操作步骤如下

先理清关联逻辑

  • 你之前用JUnit时,是靠@RunWith(Cucumber.class)标注的测试类触发Cucumber执行,IDE手动跑feature文件也是底层调用这个JUnit运行器。
  • 换成TestNG后,要改用Cucumber提供的TestNG适配类,通过继承它来实现测试触发,核心的feature、步骤定义、PO对象完全不用改。

步骤1:调整Maven依赖

移除JUnit和Cucumber的适配依赖,换成Cucumber-TestNG的适配包,同时保留TestNG依赖:

<!-- 注释/删除原有Cucumber-JUnit依赖 -->
<!-- <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>你的版本</version>
    <scope>test</scope>
</dependency> -->

<!-- 保留TestNG依赖,版本选你项目兼容的 -->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.8.0</version>
    <scope>test</scope>
</dependency>

<!-- 添加Cucumber-TestNG适配依赖,版本要和你的cucumber-java等版本一致 -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>你的Cucumber版本</version>
    <scope>test</scope>
</dependency>

步骤2:替换运行器类

把原来的JUnit运行器类改成TestNG版本,核心是继承AbstractTestNGCucumberTests:
原来的JUnit运行器示例:

// 旧的JUnit版本
import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "com.yourproject.stepdefs",
    plugin = {"pretty", "html:target/cucumber-reports"}
)
public class RunCucumberTests {}

替换成TestNG版本:

// 新的TestNG版本
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;

@CucumberOptions(
    // 这里的参数和旧版本完全一致,直接复用
    features = "src/test/resources/features",
    glue = "com.yourproject.stepdefs",
    plugin = {"pretty", "html:target/cucumber-reports"}
)
public class RunCucumberTests extends AbstractTestNGCucumberTests {}

步骤3:验证手动运行

在IDE里右键点击.feature文件,选择「Run with TestNG」(如果没这个选项,重启IDE或确认TestNG插件已安装),就能像之前用JUnit一样手动执行单条feature或场景了。

可选:配置批量执行

如果需要批量跑测试,可创建testng.xml放在src/test/resources下:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Cucumber E2E Suite">
    <test name="All Tests">
        <classes>
            <class name="com.yourproject.RunCucumberTests"/>
        </classes>
    </test>
</suite>

再配置Maven的surefire插件来执行这个配置文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>

注意事项

  • 所有Cucumber组件版本要统一(比如cucumber-java、cucumber-testng版本必须相同),避免版本冲突。
  • 如果之前用了JUnit专属注解(比如@BeforeClass),要换成TestNG对应的注解(比如@BeforeSuite);更推荐用Cucumber自带的@Before/@After钩子,这样跨运行器兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:33