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)
逻辑清晰,适合新手理解:
- 提取通过的测试用例数
passed=$(grep -o 'passed="[^"]*"' testng-results.xml | sed 's/passed="//;s/"//')
- 提取总测试用例数
total=$(grep -o 'total="[^"]*"' testng-results.xml | sed 's/total="//;s/"//')
- 计算通过率(保留2位小数)并赋值给变量
test_pass_ratio=$(echo "scale=2; $passed / $total" | bc)
- 查看结果
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
相关产品推荐
相关产品推荐

