无论如何将cobertura coverage xml报告合并在一起?

时间:2014-10-20 15:16:18

标签: unit-testing code-coverage cobertura gcovr

我有c ++ / c应用程序,有很多单元测试。我想得到每个测试的整体覆盖率和个人覆盖率,条件是每个测试只能运行一次。 对于jenkins cobertura插件,处理的格式必须是xml(cobertura xml)。

到目前为止,我在编译时生成gcno文件,在使用source时生成gcda文件。然后调用gcovr获取xml文件。

我想创建每个单元测试的覆盖范围(从而为每个单元测试创​​建覆盖xml),然后将这些xml文件合并到一个xml文件中。

谢谢!

8 个答案:

答案 0 :(得分:3)

ReportGenerator的最后一个预发行版本(4.0.0-rc4)可以合并cobertura文件。

您可以从nuget

安装它

用法:

reportgenerator "-reports:target\*\*.xml" "-targetdir:C:\report" -reporttypes:Cobertura

在targetdir目录中生成文件 Corbertura.xml

您可以使用 dotnet核心版本在Linux或Mac上使用它

答案 1 :(得分:2)

我写了python script,它可以将cobertura报告合并在一起。它只合并行“命中”,并且能够在合并时过滤特定的包。

条件(分支率)覆盖率和线路覆盖率(线速率)百分比值尚未合并。 Jenkins插件重新计算这些值,因此在此上下文中不必实现(但可能会实现)。

条件覆盖似乎也不能轻易组合在一起,因此当报告在最终值上合作时它不起作用(意味着一个文件具有条件覆盖50% (2/4)而其他条件覆盖50% (2/4)其他两个分支。结果设置为这两个数字中的较高者,因此它仍然是50% (2/4)

答案 2 :(得分:2)

抱歉无法发表评论:

@ x3mspeedy非常适合发布一个脚本,但是从那时起他们已经将脚本移动了一下,我搜索了回购并将其拉入公共要点:

https://gist.github.com/tgsoverly/ef975d5b430fbce1eb33

答案 3 :(得分:1)

我发现用于合并Cobertura文件的最简单的实用程序是通过NPM cobertura-merge

用法:

npm install cobertura-merge
cobertura -merge -o output.xml package1=input1.xml package2=input2.xml

或者可以直接使用它而无需通过npx安装:

npx cobertura-merge -o output.xml package1=input1.xml package2=input2.xml

示例来自GitHub README for cobertura-merge

答案 4 :(得分:1)

似乎您正在使用gcovr。从4.2版开始,gcovr can merge its JSON reports with the -a option。因此,您可以这样做:

.herokuapp.com

答案 5 :(得分:0)

无法添加评论,请参阅:

  

https://github.com/cobertura/cobertura/wiki/Command-Line-Reference

在底部。

答案 6 :(得分:0)

我也在寻找解决方案,但在我的情况下,大约有1000个Cobertura XML文件,所有上述脚本在处理这样的数量时都非常慢。

最后,我提出了merge-cobertura.py Python脚本进行合并。但是,它所支持的内容非常有限,因为我需要的是合并来自OpenCppCoverage的报告,以便在Codecov使用。因此,它只是合并线路命中,忽略任何分支信息(没有来自OpenCppCoverage)并假设所有覆盖报告都是针对相同的路径。它还将所有包合并为一个。

也许有人会觉得这很有用,my blog还有更多细节。

答案 7 :(得分:0)

对于它的价值,我制作了一个节点脚本来合并多个cobertura XML报告。 设置非常简单,可以满足我的需求。 https://gist.github.com/merlosy/8efabc754985aa6e754a3d5932b1a77d