寻找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
相关产品推荐
相关产品推荐

