实现代码覆盖率并在管道中显示
代码覆盖率度量在自动测试期间执行的源代码的百分比。 此指标可帮助团队了解测试有效性、识别未经测试的代码区域并提高软件质量。 在 CI/CD 管道中实现代码覆盖率可提供测试差距的可见性,并帮助维护高质量标准。
实现因平台和编程语言而异,但核心原则仍保持一致。 让我们了解如何在 Azure Pipelines 中实现代码覆盖率并有效地显示结果。
在 Azure Pipelines 中实现代码覆盖率
对于 .NET (C#) 项目,实现代码覆盖率涉及几个关键步骤:
- 设置测试和覆盖率工具: 使用支持 NUnit、MSTest 或 xUnit for .NET 等代码覆盖率分析的测试框架。 将 Coverlet 或 OpenCover 等代码覆盖率工具集成到项目中。 这些工具可以生成与 Azure Pipelines 兼容的各种格式的代码覆盖率报告。
- 配置 Azure Pipelines: 在 Azure DevOps 门户中,导航到 Azure DevOps 项目并选择要在其中添加代码覆盖率的管道。 编辑管道配置,并添加用于安装依赖项并生成项目的步骤。
- 添加代码覆盖率任务: 将任务添加到管道,以运行启用了代码覆盖率的测试并生成覆盖率报告。 为测试运行程序使用适当的命令行参数启用代码覆盖率分析,并为覆盖率报告指定输出格式。
- 发布代码覆盖率报告:将生成的代码覆盖率报告作为工件发布,或将其附加到管道运行。 使用 Azure Pipelines 的内置发布功能或自定义任务将覆盖范围报告上传到 Azure DevOps 或外部服务。
下面是演示此方法的示例管道:
```yaml
trigger:
- main
pool:
vmImage: "windows-latest"
steps:
- task: UseDotNet@2
inputs:
packageType: "sdk"
version: "8.0.x"
- script: dotnet restore
displayName: "Restore Dependencies"
- script: dotnet build --configuration Release
displayName: "Build Solution"
- script: dotnet test --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
displayName: "Run Tests with Code Coverage"
- task: PublishCodeCoverageResults@2
inputs:
summaryFileLocation: "$(Agent.TempDirectory)/**/*.xml"
failIfCoverageEmpty: true
```
此管道在生成过程中生成代码覆盖率报告。 这样就可以在 Azure DevOps 门户中查看和分析覆盖率结果。 若要执行更详细的分析,可以下载代码覆盖率工件,并使用 Visual Studio(使用 Visual Studio“测试”任务时)或代码覆盖率工具特定的选项来检查这些工件。
使用 GitHub Actions 实现代码覆盖率
若要进行比较,下面介绍如何使用 GitHub Actions 为 .NET (C#) 项目实现代码覆盖率:
- 设置测试和覆盖率工具: 与 Azure DevOps 一样,请使用支持代码覆盖率分析的测试框架。 验证这些工具是否可以以与 GitHub 兼容的格式生成代码覆盖率报告。
- 创建 GitHub Actions 工作流: GitHub 存储库页上,导航到 .github/workflows 目录。 创建新的 YAML 文件(例如,ci.yml),以定义工作流配置。 为工作流定义触发器,例如拉取请求或推送到特定分支。
- 配置工作流步骤: 定义工作流 YAML 中的步骤以设置环境、还原依赖项、生成项目、运行测试和生成代码覆盖率报告。 确保项目的源代码、测试配置和必要的依赖项包含在存储库中。 使用 action/checkout 之类的操作签出存储库,使用 actions/setup-dotnet 来设置 .NET Core SDK,使用 coverallsapp/github-action 或 codecov/codecov-action 来上传代码覆盖率报告。
下面是演示此方法的示例工作流:
```yaml
name: Code Coverage
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: "8.0.x"
- name: Restore Dependencies
run: dotnet restore
- name: Build Solution
run: dotnet build --configuration Release
- name: Run Tests
run: dotnet test --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
- name: Upload Code Coverage Report
uses: coverallsapp/github-action@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
```
每当创建拉取请求或代码推送到主分支时,此 GitHub Actions 工作流都会自动运行测试并生成代码覆盖率报告。 请确保拥有必要的权限和 API 令牌,以便将代码覆盖率报告上传到第三方服务,如 Coveralls 或 Codecov。