如何通过正则表达式提取coverage.py生成的测试覆盖率总百分比数值
sed提取coverage.py日志总覆盖率数值方案
直接可用的命令
你可以直接使用以下sed语句完成数值提取:
COVERAGE_SCORE=$(sed -rn 's/^TOTAL.*[[:space:]]+([0-9]+)%$/\1/p' coverage37.log) echo "Coverage is $COVERAGE_SCORE"
命令说明
-n:关闭sed默认全量输出逻辑,仅输出匹配处理后的内容-r:启用扩展正则表达式,无需额外转义元字符,兼容性和可读性更高- 替换规则拆解:
- 匹配以
TOTAL开头的行,过滤所有无关日志内容 - 自动跳过TOTAL行中从行首到最后一个百分号前的所有内容,兼容不同版本coverage输出的空格数量差异
- 捕获行尾百分号前的数字,直接输出数值,自动丢弃百分号
- 匹配以
注意事项
如果你的coverage配置输出的覆盖率带小数(例如98.7%),只需要将正则中的[0-9]+调整为[0-9.]+即可同时捕获整数和小数部分。
后续生成徽章示例
拿到数值后可直接传入anybadge生成自定义徽章,还可根据数值自动切换徽章颜色:
# 覆盖率≥90为绿色,70-89为橙色,低于70为红色 BADGE_COLOR=$(if [ $COVERAGE_SCORE -ge 90 ]; then echo "green"; elif [ $COVERAGE_SCORE -ge 70 ]; then echo "orange"; else echo "red"; fi) anybadge -l "覆盖率" -v "${COVERAGE_SCORE}%" -c $BADGE_COLOR -o coverage.svg
内容的提问来源于stack exchange,提问作者Cord Kaldemeyer
相关产品推荐
相关产品推荐

