如何从命令行执行Maven项目?执行mvn test无测试用例运行
解决
mvn test提示"No tests to run"的问题 我来帮你排查下为什么执行mvn test时找不到测试类,咱们一步步来解决:
核心问题分析
从你的描述和POM文件来看,主要有几个配置错误和不符合Maven规范的地方,导致Maven无法识别你的测试脚本:
1. 目录结构与Maven约定不匹配,且命令执行路径错误
- Maven默认的测试源码目录是
src/test/java,你的测试放在src/testScripts,需要正确配置路径,但你当前的POM里把sourceDirectory(主源码目录)指向了测试脚本目录,这会混淆主代码和测试代码的位置。 - 你提到在
/Copy of naukri/src/testScripts/目录下执行mvn test,这是错误的——Maven必须在POM文件所在的项目根目录执行命令,否则无法正确识别项目结构。
2. Maven Compiler插件配置错误
你把testSourceDirectory和suiteXmlFiles放在了maven-compiler-plugin的配置里,这些配置应该属于负责执行测试的maven-surefire-plugin,或者<build>根节点下,而不是编译插件。
3. TestNG依赖的错误排除
你的TestNG依赖里排除了自身,这会导致TestNG库无法被正常引入,测试框架根本无法工作:
<exclusions> <exclusion> <groupId>org.testng</groupId> <artifactId>testng</artifactId> </exclusion> </exclusions>
4. Java版本不一致
POM里properties指定的Java版本是1.8,但maven-compiler-plugin里的source和target是1.6,版本不统一会导致编译或运行时出现兼容性问题。
修复步骤与修正后的POM
第一步:调整项目目录结构(可选但推荐)
虽然可以自定义路径,但遵循Maven约定能减少配置麻烦,建议把测试类移到src/test/java/testScripts/NewTest.java;如果不想移动,就按下面的POM配置自定义路径。
第二步:修正POM文件
以下是修复后的完整POM,我标注了关键修改点:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>naukri</groupId> <artifactId>NewTest</artifactId> <version>0.0.1-SNAPSHOT</version> <name>NaukriUpdate</name> <description>----------------</description> <properties> <!-- 统一Java版本为1.8 --> <java.version>1.8</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> </properties> <build> <!-- 主源码目录(如果你的主代码在别的地方,这里改成对应路径,比如src/main/java) --> <sourceDirectory>src/main/java</sourceDirectory> <!-- 自定义测试源码目录 --> <testSourceDirectory>src/testScripts</testSourceDirectory> <plugins> <!-- 编译插件:只负责编译配置,升级到兼容Java8的版本 --> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <!-- Surefire插件:负责执行TestNG测试,升级到稳定版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <systemPropertyVariables> <propertyName>firefox</propertyName> </systemPropertyVariables> <!-- 指定TestNG的suite文件,确保该文件在项目根目录,或者写正确的相对路径 --> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.5.3</version> </dependency> <!-- 修复TestNG依赖:移除错误的自身排除,添加test作用域 --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.10</version> <scope>test</scope> </dependency> </dependencies> </project>
第三步:正确执行命令
- 切换到POM文件所在的项目根目录(也就是
/Copy of naukri/目录)打开终端 - 执行命令:
mvn clean test(先clean清理之前的构建残留,再执行测试)
额外检查点
- 确认你的
NewTest.java类上添加了TestNG的@Test注解,否则TestNG不会识别它为测试类:import org.testng.annotations.Test; public class NewTest { @Test public void myTest() { // 你的测试代码逻辑 } } - 确认
testng.xml文件存在且配置正确,比如指定了正确的测试类路径:<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" > <suite name="TestSuite"> <test name="MyTest"> <classes> <class name="testScripts.NewTest"/> </classes> </test> </suite>
内容的提问来源于stack exchange,提问作者Harish Kannan
相关产品推荐
相关产品推荐

