You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BuildQualityChecks未读取全部覆盖率报告,如何合并多份报告校验?

问题:合并多项目单元测试覆盖率报告以确保BuildQualityChecks基于完整数据校验

问题现象

  • 解决方案包含3个分别对应Api、Service、Data的单元测试项目,构建时生成3份测试结果,但PublishCodeCoverageResults任务仅读取其中一份报告
  • 管道的Code Coverage标签显示总行覆盖率正确,但代码覆盖率工具数值偏低,BuildQualityChecks统计的已覆盖行数极少
  • 发布步骤出现警告:

##[warning]Multiple file or directory matches were found. Using the first match: /azp/_work/_temp/1c8c6bf9-96be-405d-b0b5-b852eb474a1b/coverage.cobertura.xml

当前管道配置

- task: DotNetCoreCLI@2
  displayName: dotnet test $(buildConfiguration)
  inputs:
    command: test
    publishTestResults: true
    projects: '$(unitTestsDirs)/**/*.csproj'
    arguments: '--configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" --settings "./coverage.runsettings" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
    
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    
- task: BuildQualityChecks@9
  displayName: 'Check build quality'
  inputs:
    checkCoverage: true
    coverageFailOption: fixed
    coverageType: lines
    coverageThreshold: $(CoverageThreashold)
    buildPlatform: $(BuildPlatform)

测试输出片段

Results File: /azp/_work/_temp/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18_15_05_23.trx
Attachments:
/azp/_work/_temp/d0caa73f-caee-48d1-b626-f49093a0fb14/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18.15_05_23.cobertura.xml
/azp/_work/_temp/d0caa73f-caee-48d1-b626-f49093a0fb14/coverage.cobertura.xml

Results File: /azp/_work/_temp/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18_15_05_30.trx
Attachments:
/azp/_work/_temp/1c8c6bf9-96be-405d-b0b5-b852eb474a1b/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18.15_05_31.cobertura.xml
/azp/_work/_temp/1c8c6bf9-96be-405d-b0b5-b852eb474a1b/coverage.cobertura.xml

Results File: /azp/_work/_temp/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18_15_05_35.trx
Attachments:
/azp/_work/_temp/6bb84b94-f726-44b0-94ce-3047f7af5c91/_rancher-ubuntu-on-prem-agents-nhpsb_2024-11-18.15_05_36.cobertura.xml
/azp/_work/_temp/6bb84b94-f726-44b0-94ce-3047f7af5c91/coverage.cobertura.xml

Async Command Start: Publish test results
Publishing test results to test run '911742'.
TestResults To Publish 55, Test run id:911742
Test results publishing 55, remaining: 0. Test run id: 911742
Publishing test results to test run '911744'.
TestResults To Publish 50, Test run id:911744
Test results publishing 50, remaining: 0. Test run id: 911744
Publishing test results to test run '911743'.
TestResults To Publish 71, Test run id:911743
Test results publishing 71, remaining: 0. Test run id: 911743
Published Test Run : https://dev.azure.com/xxxxx/Runs?runId=911742&_a=runCharts
Published Test Run : https://dev.azure.com/xxxxx/Runs?runId=911744&_a=runCharts
Published Test Run : https://dev.azure.com/xxxxx/Runs?runId=911743&_a=runCharts

解决方案

需要使用reportgenerator工具将多份Cobertura格式的覆盖率报告合并为一份,再提交给后续任务,步骤如下:

1. 安装ReportGenerator工具

在测试任务后添加任务安装全局工具:

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

2. 合并覆盖率报告

添加脚本任务收集所有报告并合并:

- task: Bash@3
  displayName: Merge coverage reports
  inputs:
    targetType: 'inline'
    script: |
      reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverage -reporttypes:Cobertura

3. 更新发布覆盖率报告任务

将目标指向合并后的报告:

- task: PublishCodeCoverageResults@1
  displayName: 'Publish merged code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Build.SourcesDirectory)/coverage/Cobertura.xml'

完整修改后的管道配置

- task: DotNetCoreCLI@2
  displayName: dotnet test $(buildConfiguration)
  inputs:
    command: test
    publishTestResults: true
    projects: '$(unitTestsDirs)/**/*.csproj'
    arguments: '--configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" --settings "./coverage.runsettings" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'

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

- task: Bash@3
  displayName: Merge coverage reports
  inputs:
    targetType: 'inline'
    script: |
      reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverage -reporttypes:Cobertura

- task: PublishCodeCoverageResults@1
  displayName: 'Publish merged code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Build.SourcesDirectory)/coverage/Cobertura.xml'
    
- task: BuildQualityChecks@9
  displayName: 'Check build quality'
  inputs:
    checkCoverage: true
    coverageFailOption: fixed
    coverageType: lines
    coverageThreshold: $(CoverageThreashold)
    buildPlatform: $(BuildPlatform)

说明

ReportGenerator会将所有分散的覆盖率报告合并为一份完整的Cobertura格式报告,确保PublishCodeCoverageResults和BuildQualityChecks任务都能基于完整的覆盖率数据运行,合并后的报告路径可根据需求自行调整。

内容的提问来源于stack exchange,提问作者Dimuth Ruwantha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:18:12