lcov可以统计指定目录下的所有代码覆盖率,当前有这样一个诉求:有两个版本的代码:v1和v2,想统计用例v2相对v1增加及修改的代码的覆盖情况,以确认针对这部分代码设计的用例是有效的。然而lcov不支持直接生成增量代码覆盖率,故需要使用到addlcov工具,addlcov可以根据对比两个目录下文件的差异列表,对指定代码形成覆盖率数据,使用方法如下:
1. 使用diff命令生成文件差异列表
diff -r -N -x ".git" -x "*.gcov" -u <old_src_path> <new_src_path> > diff.txt
其中<old_src_path>是v1版本代码路径、<new_src_path>是v2版本代码路径,生成的diff.txt中包含的就是v2相比v1的增量代码
2. 使用addlcov生成增量代码覆盖率文件
addlcov --diff <full_cov_file> diff.txt -o <add_cov_file> --strip <depth> --path <new_src_path>
其中<full_cov_file>为之前统计的v2版本上的全量覆盖率;<add_cov_file>为输出的增量覆盖率info文件;<depth>是要截取的代码深度;<new_src_path>是v2版本源码
这里的<depth>再做一下解释:源码路径一般比较长,假设我们源码路径是a/b/c/d/e,这里的depth取值3则后续生成报告的根目录就是d了,前面三级就被屏蔽掉了
3. 使用genhtml生成html格式的覆盖率报告
genhtml -o <report_dir> <add_cov_file>
其中<report_dir>是想要生成的报告路径名称,<add_cov_file>是通过上一步生成的覆盖率文件