使用gtest和lcov测试代码覆盖率

一、gtest安装

1、源码下载安装,地址如下
https://github.com/google/googletest/tree/release-1.12.0
参考readme的步骤
cd googletest
mkdir build
cd build
cmake …
make
sudo make install
注意:若是在CentOS系统安装,官网有如下提醒,需要devtoolset-7工具链。
在这里插入图片描述
We require the devtoolset-7 toolchain (compiler, linker, build tools, etc.) on RHEL 7 and CentOS 7.
以CentOS系统为例,需要先执行以下命令安装devtoolset-7,然后再安装googletest。

sudo yum install centos-release-scl
sudo yum install devtoolset-7
scl enable devtoolset-7 bash

2、命令直接安装

sudo apt-get install libgtest-dev

安装完成后安装路径如下
使用gtest和lcov测试代码覆盖率_第1张图片

二、lcov安装

gcov是gnu工具集自带的工具,用来统计代码覆盖率,不过只有文本信息, lcov 工具可以理解成 gcov 工具的前端,根据 gcov 的数据生成可视化的报告,可以直观的看代码覆盖率。

1、进入https://ltp.sourceforge.net/coverage/lcov.php下载安装包
2、运行如下命令安装

tar xzvf lcov-1.14.tar.gz
cd  lcov-1.14
make install

三、编译配置

在makefile中增加如下库和两个参数选项

LIBS += -lgtest
CFLAGS +=-fprofile-arcs  -ftest-coverage

四、编译执行

make 命令编译后, 会为每个源文件生成.gcno结尾的文件
编译后生成可执行文件demo,运行 ./demo,运行后,会为每个源文件,生成gcda结尾的文件

五、生成成图形化显示数据

1、lcov -c -d . -o test.info --rc lcov_branch_coverage=1

-c :捕捉覆盖率数据
-d :表示的是目录,也就是gcno和gcda目录。使用lcov统计覆盖率,必须将gcno和gcda放在同一个目录,并且有源代码,且源代码的目录和编译时的目录一样,否则不能生成。
-o :表示输出文件,以.info结尾,用来存储数据
lcov在1.10版本后默认关闭分支覆盖率,想要打开,需要加上–rc lcov_branch_coverage=1和–branch-coverage,统计分支覆盖率

若将usr下的库包含在内,则运行下面命令删掉该目录
lcov -r test.info “/usr/*” -o test.info --rc lcov_branch_coverage=1
使用gtest和lcov测试代码覆盖率_第2张图片
使用gtest和lcov测试代码覆盖率_第3张图片
2、genhtml --branch-coverage -o result test.info,result目录下生成如下内容

六、使用浏览器打开index.html查看函数覆盖情况

行覆盖率(line coverage):描述有多少比例的代码行经过了测试。
函数覆盖率(function coverage):描述有多少比例的函数经过了测试。
分支覆盖率(branch coverage):描述有多少比例的分支(例如:if-else,case语句)经过了测试。

进入每个文件夹函数查看具体函数:
分支覆盖情况详细介绍如下:
中括号代表生成的一对子分支,+代表该子分支被覆盖,-代表该子分支未覆盖,但对应的另一分支被覆盖,#代表两个子分支均未被覆盖。 以if(condition)为例,如果该condition没有子条件,即不是其他条件"与"、"或"产生,那么会产生两个分支,即condition== true 和 condition== false,若只能满足condition== true 或false,则分支覆盖结果为[+ -]或[- +],如果多次调用时condition== true 或false都能满足,则分支覆盖结果为[+ +]。如果condition == true或false都不能发生,那么覆盖结果为[# #](虽然在最简单的条件下这个结果并不会发生)。
行覆盖情况详细介绍如下: 如果该行代码被覆盖到,则其底色为蓝色,没有被覆盖到,则底色为橙色。

七、错误解决

使用lcov生成.info文件的时候,出现了如下错误:
Can’t locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/geninfo line 58.
解决办法:
执行安装perl-Digest-MD5的命令:
yum -y install perl-Digest-MD5

你可能感兴趣的:(Linux,代码覆盖率,centos)