我有c ++ / c应用程序,有很多单元测试。我想得到每个测试的整体覆盖率和个人覆盖率,条件是每个测试只能运行一次。 对于jenkins cobertura插件,处理的格式必须是xml(cobertura xml)。
到目前为止,我在编译时生成gcno文件,在使用source时生成gcda文件。然后调用gcovr获取xml文件。
我想创建每个单元测试的覆盖范围(从而为每个单元测试创建覆盖xml),然后将这些xml文件合并到一个xml文件中。
谢谢!
答案 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非常适合发布一个脚本,但是从那时起他们已经将脚本移动了一下,我搜索了回购并将其拉入公共要点:
答案 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
答案 4 :(得分:1)
似乎您正在使用gcovr。从4.2版开始,gcovr can merge its JSON reports with the -a
option。因此,您可以这样做:
.herokuapp.com
答案 5 :(得分:0)
答案 6 :(得分:0)
我也在寻找解决方案,但在我的情况下,大约有1000个Cobertura XML文件,所有上述脚本在处理这样的数量时都非常慢。
最后,我提出了merge-cobertura.py Python脚本进行合并。但是,它所支持的内容非常有限,因为我需要的是合并来自OpenCppCoverage的报告,以便在Codecov使用。因此,它只是合并线路命中,忽略任何分支信息(没有来自OpenCppCoverage)并假设所有覆盖报告都是针对相同的路径。它还将所有包合并为一个。
也许有人会觉得这很有用,my blog还有更多细节。
答案 7 :(得分:0)
对于它的价值,我制作了一个节点脚本来合并多个cobertura XML报告。 设置非常简单,可以满足我的需求。 https://gist.github.com/merlosy/8efabc754985aa6e754a3d5932b1a77d