首页 > 解决方案 > 使用正则表达式 (REGEX) 从coverage.py 中获取总覆盖率的值

问题描述

这个问题基本上是关于如何使用正则表达式,但我在很多非常密切相关的问题中找不到任何答案。

我在 gitlab 管道中使用coverage.pypy.test创建了覆盖率报告,这些报告看起来像下面这样通过管道传输到一个文件中coverage37.log

-------------- generated xml file: /builds/utils/foo/report.xml --------------
---------- coverage: platform linux, python 3.7.11-final-0 -----------
Name                          Stmts   Miss  Cover
-------------------------------------------------
foo/tests/bar1.py                52      0   100%
...
foo/tests/bar2.py                 0      0   100%
-------------------------------------------------
TOTAL                           431      5    99%
======================= 102 passed, 9 warnings in 4.35s ========================

现在我想为总覆盖率创建一个徽章,即这里的 99% 值,并且只获取数字 (99) 以便将其分配给变量。然后,此变量可用于使用anybadge包创建灵活的覆盖范围徽章。

我天真的方法是这样的:

COVERAGE_SCORE=$(sed -n 'what to put here' coverage37.log)
echo "Coverage is $COVERAGE_SCORE"

请注意,我知道 gitlab、github 等提供了自动创建徽章的特定功能。但我想手动创建它,以便获得更多控制权并为每个分支创建徽章。

欢迎任何提示。提前致谢!

标签: sedgreppytestcoverage.py

解决方案


这里更容易使用awk

cov_score=$(awk '$1 == "TOTAL" {print $NF+0}' coverage37.log)

这里$1 == "TOTAL"匹配第一个单词作为的行TOTALprint $NF+0打印最后一个字段的数字部分。


推荐阅读