寻求可复用GitHub Action:在构建汇总页展示Karate测试图形化结果
解决Karate测试在GitHub构建汇总页展示图形化汇总的方案
先排查原有配置失效的问题
你的dorny/test-reporter配置未生效,大概率是路径问题导致的:
- GitHub Actions中工作目录是仓库根目录,绝对路径
/app/不符合默认工作区规则,改成相对路径通配符**/target/surefire-reports/*.xml即可覆盖所有子目录下的报告文件 - 可在测试步骤后加一句
run: ls -la **/target/surefire-reports/,确认报告文件是否生成
实现图形化汇总的两种方法
方法一:利用Checks标签页生成自带图形的测试报告
修正后的dorny/test-reporter配置会在GitHub仓库的Checks标签页生成带统计图形(饼图/条形图)的测试汇总,直接展示通过/失败/跳过数量:
- name: Karate Test Result Report uses: dorny/test-reporter@v1 if: success() || failure() # 测试失败也执行 with: name: Karate Test Results path: "**/target/surefire-reports/*.xml" # 修正为相对通配路径 reporter: java-junit fail_on_error: true
方法二:在PR评论中展示图形化汇总表格
如果需要直接在PR评论里展示直观的汇总,可先解析JUnit报告提取统计数据,再生成带emoji的markdown表格:
# 1. 先运行Karate测试(确保生成报告) - name: Run Karate Integration Tests run: mvn test -Dtest=KarateTests # 2. 解析JUnit报告,提取测试统计数据 - name: Parse Test Statistics id: test-stats run: | # 用Python解析XML(无需额外安装依赖,GitHub Actions默认带Python) python3 - << 'EOF' import xml.etree.ElementTree as ET import glob passed, failed, skipped = 0, 0, 0 for report in glob.glob('**/target/surefire-reports/*.xml', recursive=True): tree = ET.parse(report) for case in tree.findall('.//testcase'): if case.find('failure') or case.find('error'): failed += 1 elif case.find('skipped'): skipped += 1 else: passed += 1 print(f"passed={passed}") print(f"failed={failed}") print(f"skipped={skipped}") EOF >> $GITHUB_OUTPUT # 3. 添加PR评论展示图形化汇总 - uses: mshick/add-pr-comment@v2 if: always() with: status: ${{ job.status }} message: | ### 🧪 Karate集成测试汇总 | 测试状态 | 数量 | |----------|------| | ✅ 通过 | ${{ steps.test-stats.outputs.passed }} | | ❌ 失败 | ${{ steps.test-stats.outputs.failed }} | | ⏭️ 跳过 | ${{ steps.test-stats.outputs.skipped }} | ${{ job.status == 'success' && '🎉 所有测试通过!' || '⚠️ 部分测试失败,请查看详情。' }}
内容的提问来源于stack exchange,提问作者James Bender
相关产品推荐
相关产品推荐

