TestNG测试在IntelliJ正常运行,Maven命令行执行无测试运行且报错
我来帮你排查这个问题,从你给出的信息来看,主要有两个核心问题:没有测试用例被执行,以及目录创建失败,还有一个log4j的警告,咱们一个个解决:
你的运行错误信息
------------------------------------------------------- T E S T S ------------------------------------------------------- Running TestSuite Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@34c4973 log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 2020-06-29 17:32:49 [ERROR]failed to create 'BaseTest-531000' directory Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.99 sec Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
你的POM.xml配置
<modelVersion>4.0.0</modelVersion> <groupId>com.takeaway.automation</groupId> <artifactId>takeaway-project</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>1.8</java.version> <testng.version>7.1.0</testng.version> <awaitility.version>3.0.0</awaitility.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> <dependencies> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.testng/testng --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.12</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-configuration2</artifactId> <version>2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.8</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.10.3</version> </dependency> </dependencies> </project>
1. 解决测试用例不执行的问题
你当前的POM里没有配置maven-surefire-plugin,Maven默认的Surefire版本和你用的TestNG 7.1.0不兼容,导致无法识别测试类。
需要在<build><plugins>里添加这个插件,指定匹配的版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <!-- 该版本完美兼容TestNG 7.x --> <configuration> <!-- 匹配你的HTTPTester.java命名规则,如果是*Test.java可以不用配置 --> <includes> <include>**/*Tester.java</include> </includes> </configuration> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> </dependency> </dependencies> </plugin>
另外确认你的HTTPTester.java类是public的,并且测试方法上有@Test注解,这样Surefire才能识别到测试用例。
2. 解决目录创建失败的问题
错误里的failed to create 'BaseTest-531000' directory,应该是你的测试基类(BaseTest)里有创建目录的逻辑,但Maven运行时的工作目录和IntelliJ不同,或者当前用户没有写入权限。
可以做这几个调整:
- 在测试代码里基于项目根目录生成路径,避免相对路径问题:
String projectRoot = System.getProperty("user.dir"); File dir = new File(projectRoot + "/target/test-output/BaseTest-531000"); dir.mkdirs(); // 用mkdirs()替代mkdir(),自动创建多级目录 - 确保你是在项目根目录下执行
mvn test命令 - 检查目标目录的写入权限,确保当前用户可以创建目录
3. 解决Log4j警告问题
这个警告是因为缺少Log4j配置文件,只需要在src/test/resources目录下创建一个log4j.properties文件,示例内容:
log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
这样就能消除警告,同时让Log4j正常输出日志了。
内容的提问来源于stack exchange,提问作者kim el
相关产品推荐
相关产品推荐

