Azure DevOps 代码覆盖率,其中包含 PR 的 .coverage 和完整报告的 Cobertura

Kri*_*lén 5 code-coverage azure-devops

我有一个用于验证拉取请求的Azure DevOps 管道。我已配置 dotnet test为使用--collect "Code coverage"参数收集代码覆盖率指标:

- task: DotNetCoreCLI@2
  displayName: dotnet test
  inputs:
    command: 'test'
    arguments: '--configuration $(BuildConfiguration) --collect "Code coverage" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
    workingDirectory: $(baseWorkingDirectory)
    projects: 'tests/**/*.csproj'
    nobuild: true
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我也通过了/p:CollectCoverage=true /p:CoverletOutputFormat=cobertura。为了生成覆盖率报告,我必须这样做:

- task: CmdLine@2
  inputs: 
    script: dotnet tool install -g dotnet-reportgenerator-globaltool

- task: CmdLine@2
  inputs: 
    script: reportgenerator -reports:$(Build.SourcesDirectory)/tests/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/CodeCoverage -reporttypes:HtmlInline_AzurePipelines;Cobertura

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)/CodeCoverage/Cobertura.xml'
    reportDirectory: '$(Build.SourcesDirectory)/CodeCoverage'
Run Code Online (Sandbox Code Playgroud)

文档指出拉取请求的代码覆盖率仅可使用 Visual Studio 代码覆盖率结果格式(文件扩展名 .coverage)

所以:

  • 我必须使用Visual Studio 代码覆盖率 --collect:"Code Coverage"来获取拉取请求的代码覆盖率,因为 Cobertura 格式不起作用。
  • 我需要使用Cobertura格式才能在管道中的“代码覆盖率”选项卡--collect:"Code Coverage"上获得可读的报告,但如果我同时使用,Cobertura 报告将不会显示。

看来我无法同时获得 PR 的代码覆盖率和 Cobertura 格式的完整报告。

其他人似乎也有同样的问题,但该问题并未在该线程中得到解决。

我错过了什么吗?

Krz*_*tof 2

你能尝试使用这个吗?

您必须coverlet.collector在所有测试项目中安装软件包。请注意我使用了 argument --collect:"XPlat Code Coverage"

# You just added coverlet.collector to use 'XPlat Code Coverage'
- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true'
    workingDirectory: $(Build.SourcesDirectory)

- task: DotNetCoreCLI@2
  inputs:
    command: custom
    custom: tool
    arguments: install --tool-path . dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

- script: ./reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
  displayName: Create reports

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml  
Run Code Online (Sandbox Code Playgroud)

请注意,您可能有不同的文件夹结构。

如果你想使用Code coverage for pull requests功能,你不应该使用 Cobertura:

拉取请求功能的代码覆盖率当前仅适用于 Visual Studio 代码覆盖率 (.coverage) 格式。如果您使用 Visual Studio 测试任务、dotnet core 任务的测试动词和发布测试结果任务的 TRX 选项来发布代码覆盖率,则可以使用此功能。对其他覆盖工具和结果格式的支持将在未来的里程碑中添加。

  • 我明白了,不错的收获。但是我更改了它,并且显示了“代码覆盖率”选项卡,但没有显示[拉取请求注释](https://learn.microsoft.com/en-us/azure/devops/pipelines/test/codecoverage-for-pullrequests?查看=azure-devops#coverage-status-details-and-indicators)。你两者都得到吗?我的意思是“代码覆盖率”选项卡和拉取请求评论。 (2认同)