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

如何为Reqnroll测试创建流水线并解决覆盖率与工件问题

Azure DevOps Reqnroll测试流水线优化方案

优化后的完整流水线配置

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: 'Release'
  testResultsDir: '$(Build.ArtifactStagingDirectory)/TestResults'
  coverageResultsDir: '$(Build.ArtifactStagingDirectory)/Coverage'

steps:
- task: UseDotNet@2
  displayName: '使用 .NET 8 SDK'
  inputs:
    version: '8.0.x'

- task: DotNetCoreCLI@2
  displayName: '还原依赖包'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: '编译项目'
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: '运行Reqnroll测试'
  inputs:
    command: 'test'
    # 精准匹配测试项目,适配常见命名格式
    projects: |
      **/*.Tests.csproj
      **/*Tests.csproj
    arguments: >
      --configuration $(buildConfiguration)
      --no-build
      --collect:"XPlat Code Coverage"
      --results-directory $(testResultsDir)
      --verbosity normal
    publishTestResults: true

# 复制覆盖率HTML报告到工件目录
- task: CopyFiles@2
  displayName: '复制覆盖率报告到工件目录'
  inputs:
    SourceFolder: '$(Agent.TempDirectory)/**/coverage'
    Contents: '**/*.html'
    TargetFolder: $(coverageResultsDir)

- task: PublishBuildArtifacts@1
  displayName: '发布测试结果与覆盖率工件'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'TestAndCoverageResults'
    publishLocation: 'Container'

- task: PublishCodeCoverageResults@2
  displayName: '发布代码覆盖率到Code Coverage标签'
  inputs:
    summaryFileLocation: '$(testResultsDir)/**/coverage.cobertura.xml'
    # 指向源代码根目录,若源码在src子文件夹则改为$(Build.SourcesDirectory)/src
    pathToSources: '$(Build.SourcesDirectory)'
    reportDirectory: $(coverageResultsDir)

针对问题的具体优化说明

1. 解决Summary标签无测试结果HTML工件的问题

  • 新增变量统一管理测试结果和覆盖率报告的输出路径,避免路径混乱
  • 在测试任务中指定--results-directory,将测试HTML报告直接输出到工件 staging 目录
  • 添加CopyFiles任务,把XPlat生成的覆盖率HTML从临时目录复制到工件目录
  • 重命名工件名称为更清晰的TestAndCoverageResults,确保所有测试相关文件被完整发布

2. 确保Tests标签覆盖全部4个Reqnroll测试项目

  • 替换模糊匹配规则,用明确的两行匹配覆盖xxx.Tests.csproj和xxxTests.csproj两种常见命名格式
  • 添加--verbosity normal参数,流水线日志会显示实际运行的测试项目列表,可直接验证是否覆盖全部4个项目
  • 开启publishTestResults: true,让测试结果自动同步到Azure DevOps的Tests标签

3. 解决Code Coverage标签为空的问题

  • 修正summaryFileLocation路径,指向测试任务指定的输出目录,确保能找到覆盖率数据文件
  • 修正pathToSources为源代码根目录,让系统正确关联覆盖率数据到对应源代码文件
  • 添加reportDirectory参数,指定覆盖率HTML报告路径,确保Code Coverage标签能展示可视化报告
  • 确认所有Reqnroll测试项目已安装coverlet.collector NuGet包(Reqnroll模板默认包含,缺失需手动添加)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:40:09