2016-09-24 83 views
0

我有一个项目的结构是这样的:gcovr文件夹级别摘要

/path/to/source/A/ChildA1/A1.cpp 
/path/to/source/A/ChildA2/A2.cpp 
/path/to/source/B/ChildB1/B1.cpp 
/path/to/source/B/ChildB2/B2.cpp 

最高级别的覆盖报告显示我总结了直接包含代码的每个文件夹:

/path/to/source/A/ChildA1/ 
/path/to/source/A/ChildA2/ 
/path/to/source/B/ChildB1/ 
/path/to/source/B/ChildB2/ 

有什么办法我还可以在不直接包含代码的级别上获得报告?也就是说,只适用于:

/path/to/source/A/ 
/path/to/source/B/ 

回答

0

自从几个月以来,我一直在使用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的-ED取的行只是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格式,因此具有包标签(每个目录结构的包)。但相信我,编写一个代码来计算每一行,并检查它是否对每个软件包有任何点击会非常麻烦。