如何合并两个或多个 dotnet 测试代码覆盖率文件

问题描述 投票:0回答:2

我有一个 .Net 解决方案,其中包含两个 dotnet 核心类库及其相关的单元测试项目。

当我运行

dotnet test **\*.Tests.csproj --collect "Code Coverage"
命令时,它会为每个单元测试项目生成单独的 .coveragexml 文件。

我的要求是将所有 .coveragexml 文件合并到一个文件中,并使用它来获取整个解决方案的总覆盖率矩阵。

是否有任何工具或脚本可以实现这一点?

注:

  • 我没有使用 Coverlet.
  • 我正在使用内置的 vstest.console.exe 运行测试并生成 .coveragexml 文件。
  • 我正在使用自定义代码覆盖率分析
.net .net-core code-coverage dotnet-test
2个回答
0
投票

有一个名为 dotnet-coverage 的 dotnet 工具可以做到这一点。

安装在机器上(或您的构建服务器,如果这是用于您的管道):

dotnet tool install --global dotnet-coverage

使用您喜欢的工具生成覆盖范围,然后您可以使用

dotnet-coverage
将它们全部合并到一个文件中。

dotnet 测试文件(.coverage):

dotnet-coverage merge *.coverage --recursive --output merged.coverage

dotnet 测试 XML 覆盖率文件 (.xml):

dotnet coverage merge *.xml --recursive --output coverage.xml --output-format xml

床罩 (.cobertura.xml):

dotnet-coverage merge *.cobertura.xml --recursive --output merged.cobertura.xml --output-format cobertura

在管道中使用

要在管道中使用它,请像这样设置您的步骤(这是用于 Coverlet,但可以轻松调整):

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet custom'
  inputs:
    command: custom
    custom: coverage
    arguments: 'merge *.coverage.xml --recursive --output MergedCoverage.cobertura.xml --output-format xml'

然后发布合并后的覆盖率报告:

steps:
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage from MergedCoverage.cobertura.xml'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: MergedCoverage.cobertura.xml

-1
投票

如果合并的结果没有必要仍然是 .coveragexml 格式,您可以使用 ReportGenerator 作为合并工具。

它是 GitHub 上的一个开源工具,可以接受多种输入格式(和文件),并且可以选择将其转换为其他几种格式。恐怕 .coveragexml 不是输出格式之一,而是输入格式之一。

这里是一个在命令行中运行的例子:

OpenCover.Console.exe -target:"dotnet.exe" -targetArgs:"test {solution.sln}" -output:"{outputDir}\OpenCover.xml" {-oldstyle}

有关命令的更多详细信息,请参阅ReportGenerator 文档

© www.soinside.com 2019 - 2024. All rights reserved.