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

Shell中从XML提取TestNG测试结果计算通过率并赋值

在Shell中计算TestNG测试用例通过率

给定Maven测试报告输出的XML内容:

<testng-results ignored="3" total="22" passed="8" failed="11" skipped="0">
</testng-results>

以下是几种在Shell环境中提取XML中的测试数据并计算通过率的实用方法:

方法一:分步提取计算(grep + sed + bc)

逻辑清晰,适合新手理解:

  1. 提取通过的测试用例数
passed=$(grep -o 'passed="[^"]*"' testng-results.xml | sed 's/passed="//;s/"//')
  1. 提取总测试用例数
total=$(grep -o 'total="[^"]*"' testng-results.xml | sed 's/total="//;s/"//')
  1. 计算通过率(保留2位小数)并赋值给变量
test_pass_ratio=$(echo "scale=2; $passed / $total" | bc)
  1. 查看结果
echo "测试通过率:$test_pass_ratio"

方法二:一键完成提取与计算(awk)

用awk直接解析XML行,代码更简洁:

test_pass_ratio=$(awk -F '"' '/testng-results/ {printf "%.2f", $6 / $4}' testng-results.xml)
echo "测试通过率:$test_pass_ratio"

代码说明:

  • -F '"' 以双引号作为字段分隔符
  • /testng-results/ 匹配包含目标标签的行
  • $6 对应passed属性的值,$4对应total属性的值
  • printf "%.2f" 将结果格式化为保留2位小数的浮点数

补充说明

  • 如果XML内容来自命令输出而非文件,可通过管道传递处理:
    mvn test | awk -F '"' '/testng-results/ {printf "%.2f", $6 / $4}'
    
  • 需避免除以0的情况,可添加判断:
    if [ "$total" -eq 0 ]; then
        echo "总测试用例数为0,无法计算通过率"
    else
        test_pass_ratio=$(echo "scale=2; $passed / $total" | bc)
    fi
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:02:19