2016-09-24 84 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格式,因此具有包標籤(每個目錄結構的包)。但相信我,編寫一個代碼來計算每一行,並檢查它是否對每個軟件包有任何點擊會非常麻煩。