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

jan*_*ybs 9 unit-testing code-coverage cobertura gcovr

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

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

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

谢谢!

agu*_*ars 18

ReportGenerator的最新版本可以合并 cobertura 文件。

您可以从nuget安装它

用法:

reportgenerator "-reports:target\*\*.xml" "-targetdir:C:\report" -reporttypes:Cobertura
Run Code Online (Sandbox Code Playgroud)

在 targetdir 目录下生成一个文件Corbertura.xml

可以使用dotnet core版本在 linux 或 mac 上使用


Rya*_*ney 8

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

用法:

npm install cobertura-merge
cobertura -merge -o output.xml package1=input1.xml package2=input2.xml
Run Code Online (Sandbox Code Playgroud)

或者可以直接使用,无需安装npx

npx cobertura-merge -o output.xml package1=input1.xml package2=input2.xml
Run Code Online (Sandbox Code Playgroud)

示例源自GitHub READMEcobertura-merge


amo*_*mon 6

看来你正在使用 gcovr 。从版本 4.2 开始,gcovr 可以将其 JSON 报告与-a选项合并。所以你可以这样做:

# run test1
./test1
gcovr ... --xml coverage-test1.xml --json coverage-test1.json
find . -type f -name '*.gcda' -exec rm {} +

# run test2
./test2
gcovr ... --xml coverage-test2.xml --json coverage-test2.json
find . -type f -name '*.gcda' -exec rm {} +

# combine JSON reports
gcovr -a coverage-test1.json -a coverage-test2.json --xml coverage-combined.xml
Run Code Online (Sandbox Code Playgroud)


jan*_*ybs 4

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

条件( branch-rate )覆盖率和线路覆盖率( line-rate )百分比值尚未合并。Jenkins 插件会重新计算这些值,因此在这种情况下不必实现它(但也许会实现)。

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