2016-09-24 3 views
0

J'ai un projet structuré comme celui-ci:niveau du dossier gcovr résumés

/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 

Le rapport de couverture de haut niveau me montre des résumés pour chaque dossier qui contient directement le code:

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

Est-il possible que je peut également obtenir un rapport à des niveaux qui n'incluent pas directement le code? C'est, juste pour:

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

Répondre

0

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.