如何为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.collectorNuGet包(Reqnroll模板默认包含,缺失需手动添加)
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

