You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找Python模块将JUnit XML测试报告转为美观控制台输出

解决JUnit XML转整洁控制台输出的Python方案

推荐成熟工具组合

  • junit2text:轻量Python库,直接将JUnit XML转为可读性强的文本输出,无需GUI依赖
  • junitparser + tabulate:灵活组合方案,解析XML后可自定义输出格式,覆盖绝大多数测试场景

安装命令

针对junit2text

pip install junit2text

针对junitparser+tabulate

pip install junitparser tabulate

方法1:junit2text快速转换

直接在终端执行命令,一键生成整洁文本输出:

junit2text path/to/your/android-test-results.xml

输出示例(匹配整洁易读的要求):

测试套件:com.example.auth.AuthTests
总测试用例:7 | 通过:6 | 失败:1 | 跳过:0

失败用例详情:

  • testInvalidTokenLogin
    错误信息:Assertion failed: Expected user session to be null
    堆栈跟踪:
    com.example.auth.AuthTests.testInvalidTokenLogin(AuthTests.java:45)
    ...

方法2:自定义结构化输出(junitparser+tabulate)

如果需要更定制化的格式(比如表格形式),可以用以下脚本实现:

from junitparser import JUnitXml
from tabulate import tabulate

# 加载JUnit XML报告
xml_report = JUnitXml.fromfile("path/to/your/android-test-results.xml")

# 统计汇总数据
total_cases = 0
passed = 0
failed = 0
skipped = 0
case_details = []

# 遍历所有测试套件和用例
for test_suite in xml_report:
    suite_name = test_suite.name or "未命名套件"
    for case in test_suite:
        total_cases += 1
        case_name = case.name
        status = "✅ PASSED"
        msg = ""
        
        if case.is_failed:
            status = "❌ FAILED"
            failed += 1
            result = case.result[0]
            msg = result.message or "无错误信息"
        elif case.is_skipped:
            status = "⏭️ SKIPPED"
            skipped += 1
            result = case.result[0] if case.result else None
            msg = result.message or "无跳过原因"
        else:
            passed += 1
        
        case_details.append([suite_name, case_name, status, msg])

# 打印汇总信息
print("=== Android Gradle测试结果汇总 ===")
print(f"总用例数: {total_cases} | 通过: {passed} | 失败: {failed} | 跳过: {skipped}\n")

# 打印结构化表格
print(tabulate(case_details, headers=["测试套件", "测试用例", "状态", "备注"], tablefmt="simple_grid"))

# 可选:打印失败用例的完整堆栈跟踪
print("\n=== 失败用例堆栈跟踪详情 ===")
for test_suite in xml_report:
    for case in test_suite:
        if case.is_failed:
            print(f"\n📌 用例: {case.name}")
            print(f"堆栈信息:\n{case.result[0].text}")

方案优势

  • junit2text:零代码,一键输出,适合快速查看结果
  • junitparser:成熟的JUnit XML解析库,支持所有标准JUnit报告元素(套件、用例、失败/跳过结果、堆栈跟踪等),不会出现场景覆盖不全的问题;配合tabulate可生成高度可读的控制台表格

内容的提问来源于stack exchange,提问作者TorqueNoFriction

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:02:01