执行mvn test时maven-surefire-plugin报错:testng.xml文件无效
Maven执行TestNG测试报错:Suite文件无效
我要运行的测试类路径为meropadhaiseleniumframework/src/test/java/clinchtech/Tests/BuyCourse.java,TestNG配置文件testng.xml位于meropadhaiseleniumframework/src/test/resources/testng.xml,配置代码如下:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <!-- 要并行执行测试,需添加parallel="tests" thread-count="2",表示2个<test></test>并行执行,实际项目中不建议这么做 --> <suite name="MyTestSuite"> <parameter name="URL" value="https://demo.meropadhai.com"/> <listeners> <listener class-name='TestComponents.Listeners'/> </listeners> <test name="java"> <classes> <!-- 使用包含包名的全限定类名 --> <class name="Tests.BuyCourse" /> <!-- <class name="TestNG.Tut1"/> --> </classes> </test> </suite>
在终端执行mvn test命令时,抛出如下错误:
执行项目meropadhaiseleniumframework的org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M3:test (default-test)目标失败:测试执行失败。 [错误] [错误] 请查看/Users/meropadhai6/Documents/GitHub/meropadhai-selenium/meropadhaiseleniumframework/target/surefire-reports获取单个测试结果。 [错误] 请查看转储文件(如果存在)[date].dump、[date]-jvmRun[N].dump和[date].dumpstream。 [错误] 分叉进程中出现错误 [错误] 套件文件/src/test/resources/testng.xml不是有效文件 [错误] org.apache.maven.surefire.booter.SurefireBooterForkException: 分叉进程中出现错误 [错误] 套件文件/src/test/resources/testng.xml不是有效文件 [错误] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:657) [错误] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:283) [错误] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:246) [错误] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1161) [错误] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1002) [错误] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:848) [错误] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) [错误] at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) [错误] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) [错误] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) [错误] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) [错误] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) [错误] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) [错误] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) [错误] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) [错误] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) [错误] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) [错误] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) [错误] at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) [错误] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [错误] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) [错误] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [错误] at java.base/java.lang.reflect.Method.invoke(Method.java:568) [错误] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:283) [错误] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:226) [错误] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:407) [错误] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:348)
解决办法
1. 修正TestNG配置中的类全限定名
测试类实际包路径是clinchtech.Tests,但配置文件中仅写了Tests.BuyCourse,缺少上层包名导致TestNG无法定位类。修改为:
<class name="clinchtech.Tests.BuyCourse" />
2. 确保Maven能正确识别testng.xml文件
有两种实现方式:
- 方式一:在pom.xml中配置Surefire插件
在项目根目录的pom.xml中,找到<build><plugins>节点,添加以下配置指定TestNG配置文件路径:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M3</version> <configuration> <suiteXmlFiles> <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>
- 方式二:执行命令时指定配置文件
在meropadhaiseleniumframework项目根目录下执行:
mvn test -DsuiteXmlFile=src/test/resources/testng.xml
3. 确认执行命令的工作目录
必须在meropadhaiseleniumframework项目根目录下执行mvn test,否则Maven无法识别项目结构和配置文件路径。
内容的提问来源于stack exchange,提问作者Suraj Nepali
相关产品推荐
相关产品推荐

