使用TestNG+Cucumber自动化Google页面时testng.xml执行报错排查
问题排查:TestNG+Cucumber运行testng.xml提示未找到测试
问题背景
学习TestNG结合Cucumber做自动化测试,目标加载Google主页。直接运行feature文件测试正常,但执行testng.xml时提示未找到测试,无法定位问题。
相关代码与配置
StepDefinitions代码
package com.example.StepDefinitions; import io.cucumber.java.en.Given; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; public class GoogleStepDefs { int x = 0; ChromeDriver driver; @Given("^Launch Google Home Page$") // @Test(priority = 1) public void launchgoogle(){ WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get("https://www.google.com/"); Assert.assertTrue(driver.getTitle().equals("Google")); x=1; driver.close(); } }
TestRunner代码
package com.example; import io.cucumber.testng.AbstractTestNGCucumberTests; import io.cucumber.testng.CucumberOptions; @CucumberOptions( plugin = {"html:target/cucumber-reports/cucumber.html"} , features = {"src/test/resource/features/"} , glue = {"StepDefinitions"} ) public class TestRunner extends AbstractTestNGCucumberTests{ }
Cucumber Feature文件
Feature: Google Test Scenario: Open Google Page Given Launch Google Home Page
testng.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="G:/Abul Hossain Chowdhury/Projects/testCucumberproject"> <classes> <class name="com.example.StepDefinitions.GoogleStepDefs"> </class> </classes> </test> </suite>
问题原因
- testng.xml配置错误:直接指定了步骤定义类
GoogleStepDefs,但该类中没有TestNG的@Test注解(已被注释),TestNG只会识别带@Test的方法,因此提示未找到测试。 - Cucumber与TestNG集成逻辑错误:通过TestNG运行Cucumber测试时,必须通过继承
AbstractTestNGCucumberTests的TestRunner类触发执行,而非直接调用步骤定义类。 - TestRunner路径配置问题:
features路径写为src/test/resource/features/,实际应为src/test/resources/features/(少了一个s),会导致找不到feature文件。
修复方案
- 修正testng.xml:将执行类替换为TestRunner,而非步骤定义类:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="Google Test Suite"> <classes> <class name="com.example.TestRunner"> </class> </classes> </test> </suite>
- 修正TestRunner的路径与包配置:
- 修正
features路径为正确的src/test/resources/features/ glue参数建议写全包路径com.example.StepDefinitions,避免包名歧义:
- 修正
@CucumberOptions( plugin = {"html:target/cucumber-reports/cucumber.html"} , features = {"src/test/resources/features/"} , glue = {"com.example.StepDefinitions"} )
- 保持步骤定义类状态:步骤定义类不需要
@Test注解,Cucumber会自动通过feature场景关联执行方法。
验证
修改后运行testng.xml,TestNG将调用TestRunner类,触发Cucumber加载feature文件并关联步骤定义,即可正常执行测试。
内容的提问来源于stack exchange,提问作者Abul Hossain Chowdhury
相关产品推荐
相关产品推荐

