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