【问题标题】:gcovr folder level summariesgcovr 文件夹级别摘要
【发布时间】:2016-09-24 11:34:01
【问题描述】:

我的项目结构如下:

/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/

【问题讨论】:

    标签: c++ code-coverage gcovr


    【解决方案1】:

    几个月以来我一直在使用 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 语句,并从所有经过 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 格式,因此具有包标签(每个目录结构的包)。但是请相信我,编写代码来计算每一行并检查每个包是否有任何命中是非常烦人的。

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2011-01-21
      • 2018-10-14
      • 2012-07-18
      • 2012-07-12
      • 2021-07-09
      相关资源
      最近更新 更多