几个月以来我一直在使用 gcovr。我只为源级别创建报告。但是,是的,它也可以为您的目的完成。
一种方法是从整个报告中提取( grep 或 findstr )该特定文件夹的数据。
例如我们从 gcovr 得到的报告是这样的:
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: ...../src/
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
src/A/A1/xyz.cpp 1609 2 0% 97,99,101....
src/A/A2/abcg.cpp 271 4 1% .......
src/B/B1/mnop.cpp 74 2 2% 34,42,56-.....
src/B/B2/wrds.cpp 1533 6 0% 76,83,85-.....
src/C/C1/abcdefg.cpp 1079 8 0% 143,150,152.....
因此,您可以通过指定目录结构(如“src/A”)简单地 grep 语句,并从所有经过 grep 处理的行中获取第二个字段总和和第三个字段总和以获取该目录的覆盖范围。
这似乎很忙,但是需要一个简单的 3-4 行脚本来完成。
脚本类似于:
python gcovr -d -r src/directory/ > ABCcoverage.txt
while read -r DIRPATH ; do
grep "$DIRPATH" ABCcoverage.txt > temp.txt
#ln is lines in file and ex is no. of executed lines
lnsum=0 ; exsum=0
while read -r LINE ; do
ln=$(echo $LINE | awk '{print $2}')
ex=$(echo $LINE | awk '{print $3}')
lnsum=$(expr $lnsum + $ln)
exsum=$(expr $exsum + $ex)
done < "temp.txt"
echo $DIRPATH, lines:$lnsum, executed:$exsum, covered %:$(expr ( $exsum / $lnsum ) \* 100 ) >> IntendedResult.txt
done < "DIRLIST.txt"
虽然有很多更方便的方法来执行算术。因此,请随时进行编辑。 :D
另一种方法是生成 xml 报告而不是此控制台报告。它使用 cobertura xml 格式,因此具有包标签(每个目录结构的包)。但是请相信我,编写代码来计算每一行并检查每个包是否有任何命中是非常烦人的。