发布管道 Azure Devops 代码覆盖率报告

Feb*_*lon 4 pipeline code-coverage cobertura azure-devops azure-pipelines

我正在尝试在我的 Azure DevOps Pipeline 中在线发布详细报告,但我得到的只是一个下载此 Coverage 文件的链接。(自 Visual Studio 2019 以来,社区版本无法再读取该内容) 在此处输入图片说明

这是我的管道:

trigger:
  branches:
    include:
    - '*'

pool:
  vmImage: 'windows-2019'

steps:
- task: NuGetToolInstaller@0
  displayName: Instal Nuget
  inputs:
    checkLatest: true

- task: NuGetCommand@2
  displayName: Restore Nuget Packages
  inputs:
    restoreSolution: '**/*.sln'

- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 3.1.x
    performMultiLevelLookup: true

- task: DotNetCoreCLI@2
  displayName: Build Tests
  inputs:
    command: 'build'
    projects: '**/OneTienditaUnitTests/*.csproj'
    arguments: '--configuration Release'

- script: dotnet test OneTienditaUnitTests --logger trx --collect "Code coverage"

- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

- task: XamarinAndroid@1
  displayName: Build Android App
  inputs:
    projectFile: '**/*Android*.csproj'
    outputDirectory: '$(build.binariesDirectory)/Release'
    configuration: 'Release'
Run Code Online (Sandbox Code Playgroud)

如果我像这样使用 Cobertura,则不起作用:

- task: DotNetCoreCLI@2
  displayName: Run Tests
  inputs:
    command: 'test'
    projects: '**/OneTienditaUnitTests/*.csproj'
    arguments: '--configuration Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=../reports/coverage/'
    
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage results'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(build.sourcesdirectory)\reports\coverage\coverage.cobertura.xml'
    reportDirectory: '$(build.sourcesdirectory)\reports\coverage'
Run Code Online (Sandbox Code Playgroud)

请任何帮助?我不是专业的 DevOps

Krz*_*tof 10

要发布报告,您需要使用 Cobertura。对于 TRX,您只会获得下载文件的链接。要创建 Cobertura 报告,您需要在您的测试项目coverlet.collectornuget 包中安装。在这里,您有代码可以解决您的问题:

# 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)

[2021 更新]

您不需要额外的任务来安装/运行自定义 ReportGenerator 工具:它现在是读取coverage.cobertura.xml文件的默认工具,并包含在dotnetCLI 中。

不过,默认情况下,它会将 cobertura xml 文件保存到代理上的临时目录中。所以,你只需要更新summaryFileLocation的的PublishCodeCoverageResults任务,以点到临时目录并跳过“中间人”的步骤:

# 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"'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
Run Code Online (Sandbox Code Playgroud)

  • 从 2021 年夏季开始,您不需要额外的任务来安装/运行 ReportGenerator,因为它现在是读取“coverage.covertura.xml”文件的默认工具。你只需要更新 `PublicCodeCoverageResults` 任务的 `summaryFileLocation` 以指向临时目录,就像你已经在处理传递到 ReportGenerator 路径的脚本任务一样 (2认同)