TestNG 是一个用于 Java 的测试框架,类似于 JUnit 和 NUnit。它提供了丰富的功能来组织和执行测试用例,支持并行测试、数据驱动测试、依赖测试等。TestNG 生成的测试结果通常保存在一个 XML 文件中,每次运行测试时,如果不进行特殊配置,新的测试结果会覆盖旧的测试结果。
TestNG 的测试结果主要分为以下几种类型:
TestNG 广泛应用于 Java 项目的自动化测试中,包括但不限于:
原因:TestNG 默认情况下会将测试结果保存在一个 XML 文件中,每次运行测试时,新的结果会覆盖旧的结果。
解决方法:
import org.testng.TestNG;
import java.util.ArrayList;
import java.util.List;
public class TestRunner {
public static void main(String[] args) {
TestNG testng = new TestNG();
List<String> suites = new ArrayList<>();
suites.add("testng.xml");
testng.setTestSuites(suites);
// 动态生成结果文件名
String resultFileName = "test-output-" + System.currentTimeMillis() + ".xml";
testng.setOutputDirectory("."); // 设置输出目录
testng.setXmlSuites(suites);
testng.run();
// 将结果文件重命名为带有时间戳的文件名
String originalResultFile = "test-output.xml";
String newResultFile = resultFileName;
java.io.File oldFile = new java.io.File(originalResultFile);
java.io.File newFile = new java.io.File(newResultFile);
if (oldFile.renameTo(newFile)) {
System.out.println("Successfully renamed file to " + newResultFile);
} else {
System.out.println("Failed to rename file");
}
}
}
IReporter
接口:通过实现 IReporter
接口,可以在测试执行完成后自定义结果的保存方式。import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.xml.XmlSuite;
import java.util.List;
public class CustomReporter implements IReporter {
@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
for (ISuite suite : suites) {
String suiteName = suite.getName();
String fileName = outputDirectory + "/test-output-" + suiteName + ".xml";
// 自定义结果保存逻辑
}
}
}
然后在 testng.xml
中配置该报告器:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<listeners>
<listener class-name="com.example.CustomReporter"/>
</listeners>
<test name="Test">
<!-- 测试用例配置 -->
</test>
</suite>
通过以上方法,可以有效避免每次运行 TestNG 后覆盖结果的问题,确保每次测试的结果都能被保存和查看。
领取专属 10元无门槛券
手把手带您无忧上云