Сводка уровня папок 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.....

Таким образом, вы можете просто выполнить инструкции grep, указав структуру каталогов, например, «src / A», и из всех строк, которые grep-ed, взять вторую сумму поля и сумму третьего поля, чтобы получить покрытие этого каталога.

Это кажется беспокойным, но да, для этого требуется простой 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 и имеет теги package (пакет для каждой структуры каталогов). Но поверьте мне, было бы очень утомительно писать код для подсчета каждой строки и проверки наличия совпадений для каждого пакета.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]