TestNG Java项目中如何将XML报告转换为JSON报告
TestNG XML报告转JSON可行实现方案
方案1:Java代码手动解析XML后转JSON
直接解析TestNG默认生成的test-output/testng-results.xml核心报告文件,转换为JSON格式,适合临时转换历史报告的场景:
- 首先引入XML解析和JSON序列化依赖,Maven配置示例如下:
<!-- dom4j 解析XML文件 --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.4</version> </dependency> <!-- Jackson 序列化生成JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
- 解析XML中需要的字段:比如测试套件信息、用例名称、执行状态、耗时、失败异常堆栈、用例分组等,过滤不需要的冗余字段
- 将解析得到的结构化数据封装为Java对象,调用
ObjectMapper.writeValue(new File("test-output/testng-report.json"), 封装后的对象)即可输出JSON报告
如果需要固定转换规则可以把这段逻辑封装为工具类,每次跑完测试一键执行转换
方案2:自定义TestNG IReporter监听器直接生成JSON报告
不用事后转换,测试执行完成后自动生成JSON报告,自由度最高,适合需要自定义JSON字段的场景:
- 实现TestNG的
IReporter接口,重写generateReport方法,方法内可以直接获取全量测试运行数据,不需要解析XML,简单示例如下:
public class CustomJsonReportListener implements IReporter { @Override public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) { Map<String, Object> reportContent = new HashMap<>(); // 遍历suites对象填充测试套件、用例、执行结果、Selenium截图路径等自定义数据 ObjectMapper objectMapper = new ObjectMapper(); try { // 格式化输出JSON到test-output目录 objectMapper.writerWithDefaultPrettyPrinter() .writeValue(new File(outputDirectory + "/testng-report.json"), reportContent); } catch (IOException e) { e.printStackTrace(); } } }
- 在
testng.xml中配置自定义监听器,后续每次执行测试都会自动生成JSON格式报告
方案3:使用现成TestNG JSON报告插件
如果不需要自定义格式,不想写代码,可以直接引入官方或第三方的TestNG JSON报告插件,配置完成后自动生成标准结构的JSON报告。
推荐优先选择方案2,既不需要额外做XML解析,又能灵活调整JSON结构,适配Selenium测试中添加截图、操作步骤等额外信息的需求。
内容的提问来源于stack exchange,提问作者Nata
相关产品推荐
相关产品推荐

