Je travaille avec gcovr depuis quelques mois maintenant. Je créais des rapports pour le niveau de la source uniquement. Mais oui, il peut être fait pour votre but aussi. Une manière de le faire consiste à extraire des données (grep ou findstr) de ce dossier particulier à partir de ce rapport entier.
Par exemple, le rapport que nous recevons de gcovr est comme ceci:
------------------------------------------------------------------------------
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.....
Ainsi, vous pouvez déclarations simplement grep en spécifiant la structure de répertoire comme « src/A » et de toutes les lignes qui prennent grep-ed la somme du second champ et la troisième somme du champ pour obtenir la couverture de ce répertoire.
Il semble trépidant mais oui, il faut un simple script de 3-4 lignes pour le faire.
Script serait quelque chose comme:
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"
Il y a beaucoup beaucoup de façons plus pratique d'effectuer Arithmétique bien. Alors n'hésitez pas à faire des modifications aux gens. : D
Une autre façon de le faire est de générer un rapport xml à la place de ce rapport de console. Il utilise le format cobertura xml et a donc des balises paquet (paquet pour chaque structure de répertoire). Mais croyez-moi, il serait très pénible d'écrire un code pour compter chaque ligne et vérifier si elle a des hits pour chaque paquet.