如何从bazel py_test生成cpp覆盖率

时间:2019-03-13 15:23:57

标签: python-3.x code-coverage bazel gcov lcov

我写了一些将cpp二进制文件作为子进程运行的python测试。 Python代码负责在该过程中执行测试。

我在py_test bazel规则中运行这些python测试。问题在于这并不算我们的cpp代码已被测试覆盖,因为py_test规则只能对python文件进行测试Coverga。用于生成coverage的文件是.gcda文件,这些文件是在我们运行bazel coverage test_name时生成的。在我们的情况下,由于测试以py_test的方式运行,而bazel为此存在打开的错误,因此无法覆盖cpp文件。

我试图在建立cpp二进制文件的cc_binary规则中添加copts = ["-fprofile-arcs","-ftest-coverage"]linkopts = ["-fprofile-arcs", "-lgcov --coverage"]标志(我们用py_test测试那些可执行文件),但是我们唯一要做的就是获取.gcno文件(可能是因为我们的cc_binary仅是构建的而不是运行的)。

是否知道如何获取.gcda文件或以其他任何方式获得覆盖?

1 个答案:

答案 0 :(得分:0)

运行二进制文件后,您可以看到生成的.gcda文件。 https://gcc.gnu.org/onlinedocs/gcc/Gcov-Data-Files.html 执行包含包含使用GCC -fprofile-arcs选项构建的目标文件的程序时,将生成.gcda计数数据文件。将为使用此选项编译的每个目标文件创建一个单独的.gcda文件。它包含圆弧过渡计数,值轮廓计数和一些摘要信息。