代码覆盖率选项卡未在Azure DevOps中显示

时间:2020-02-06 17:13:18

标签: azure azure-devops devops

我在Azure DevOps下有一个相对简单的测试项目,我想生成代码覆盖率。

这有效...有点。我明白了:

Azure DevOps Code coverage

我得到了我需要的文件(至少我认为),但是该选项卡丢失了。

我有这三个步骤:

执行.NET测试任务 安装报告生成器 运行报告生成器以进行转换(-reporttypes:HtmlInline_AzurePipelines; Cobertura“) 发布结果

但是该标签没有显示吗?有什么想法吗?

    - stage: Run_Unit_tests 
  jobs:
  - job: 'Tests'
    pool: 
      vmImage: 'windows-latest'
    variables:
      buildConfiguration: 'Release'
    continueOnError: true
    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: custom
        custom: tool
        arguments: install --tool-path . dotnet-reportgenerator-globaltool
      displayName: Install ReportGenerator tool

    - task: DotNetCoreCLI@2
      displayName: Test .NET
      inputs:
        command: test
        projects: '**/*Test/*.csproj'
        arguments: '--configuration $(buildConfiguration) --logger trx --collect:"XPlat Code Coverage"'
      condition: succeededOrFailed()

    - task: reportgenerator@4
      inputs:
        reports: '$(Agent.TempDirectory)\**\coverage.cobertura.xml'
        targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
        verbosity: 'Verbose'
    - task: PublishCodeCoverageResults@1
      displayName: 'Publish code coverage'
      inputs:
        codeCoverageTool: Cobertura
        summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
        failIfCoverageEmpty: false
        reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\

我尝试使用代码生成器,不使用,启用代码覆盖率变量或禁用,尝试使用报表生成器,不使用...

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,只按了F5键就出现了!

这很生气,但实际上一直如此。

似乎devops前端代码中偶尔有一个错误?

答案 1 :(得分:0)

您可以在yaml下面尝试发布代码覆盖率。

首先,您需要确保您对nuget软件包coverlet.msbuild的项目引用

<PackageReference Include="coverlet.msbuild" Version="2.5.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>

然后在您的 dotnet测试任务中启用 CollectCoverage

arguments: '/p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'

然后在 reportgenerator 任务中将 reports 文件夹指定到 CoverletOutput 文件夹reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'

请检查以下Yaml以供参考:

steps:
  - task: UseDotNet@2
    inputs:
      version: 2.2.x 

  - task: DotNetCoreCLI@2
    inputs:
      command: restore
      projects: '**\*.csproj'

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

  - task: DotNetCoreCLI@2
    displayName: Test .NET
    inputs:
      command: test
      projects: '**\*Test*.csproj'
      publishTestResults: false
      arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
    condition: succeededOrFailed()

  - task: reportgenerator@4
    inputs:
      reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'
      targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
      verbosity: 'Verbose'

    condition: succeededOrFailed()
  - task: PublishCodeCoverageResults@1
    displayName: 'Publish code coverage'
    inputs:
      codeCoverageTool: Cobertura
      summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
      failIfCoverageEmpty: false
      reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\
    condition: succeededOrFailed()

您也可以参考此blog

答案 2 :(得分:0)

我也遇到了这个问题,并将其追溯到我的管道中混合了 VS Test 和 dotnet 测试任务。一旦我删除了 VS Test 任务,它就一切正常了。

似乎 VS Test 任务上传了自己的代码覆盖率结果以及发布 cobertura 结果+这个 VS Test 任务的组合混淆了 Azure Devops。