【问题标题】:How to merge coverage reports?如何合并覆盖率报告?
【发布时间】:2019-03-16 05:27:31
【问题描述】:

我有一个 C 程序,我用 -fprofile-arcs -ftest-coverage 标志编译它。然后我在 5 个不同的输入上运行程序,这将覆盖 .gcda 文件并给我一个组合报告。但我想拥有单个测试的覆盖率报告并将它们存储在一个文件夹中,当我在此文件夹上运行任何覆盖率工具时,我会获得每个测试的报告以及一个组合报告。有没有办法做到这一点?

【问题讨论】:

    标签: gcc gcov lcov gcovr


    【解决方案1】:

    gcovr 和 lcov 都可以合并来自多次运行的波峰数据,但 gcov 没有内置功能。

    Gcovr 5.0 添加了-a/--add-tracefile 选项,可用于merge multiple coverage runs。每次测试后,使用 gcovr 创建 JSON 报告。之后,您可以使用gcovr -a cov1.json -a cov2.json 合并多个覆盖数据集并以您选择的格式生成报告。您可以添加任意数量的输入 JSON 文件,如果您有很多文件,可以使用 glob 模式(如 gcovr -a 'coverage-*.json')。

    您还可以考虑使用带有--add-tracefile 选项的lcov 工具是否可行:您可以在每次测试后运行lcov 以生成一个lcov-tracefile(您可以使用genhtml 将其转换为HTML 报告)。之后,您可以将跟踪文件合并到一个组合报告中。不能将 lcov 的跟踪文件与 gcovr 一起使用。

    【讨论】:

    • 感谢您的回答。我尝试使用 lcov 并且它可以工作,但是如果我有数百个测试用例,那么我需要单独添加每个跟踪文件,这很不方便。我在考虑是否应该使用一些工具,例如 TestWell CTC++ 或 RapiCover。
    • @Vatsal Re “我需要单独添加每个跟踪文件”:您可以编写一个脚本来运行测试并添加跟踪文件。关于“我是否应该使用一些工具”:lcov、gcov 和 gcovr 等开源工具大多是由业余爱好者在空闲时间开发的。由于缺乏开发资源,它们可能非常有限。 (披露:我是 gcovr 维护者。)付费工具很可能提供更方便的功能,但我不熟悉它们,怀疑它们会变得相当昂贵。
    • 感谢@amon 的帮助。我将编写脚本来运行测试并添加跟踪文件,因为它看起来既方便又便宜。感谢您维护 gcovr,它是一个很棒的工具。
    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2020-05-05
    相关资源
    最近更新 更多