实现代码覆盖率并在管道中显示

已完成

代码覆盖率度量在自动测试期间执行的源代码的百分比。 此指标可帮助团队了解测试有效性、识别未经测试的代码区域并提高软件质量。 在 CI/CD 管道中实现代码覆盖率可提供测试差距的可见性,并帮助维护高质量标准。

实现因平台和编程语言而异,但核心原则仍保持一致。 让我们了解如何在 Azure Pipelines 中实现代码覆盖率并有效地显示结果。

在 Azure Pipelines 中实现代码覆盖率

对于 .NET (C#) 项目,实现代码覆盖率涉及几个关键步骤:

  1. 设置测试和覆盖率工具: 使用支持 NUnit、MSTest 或 xUnit for .NET 等代码覆盖率分析的测试框架。 将 Coverlet 或 OpenCover 等代码覆盖率工具集成到项目中。 这些工具可以生成与 Azure Pipelines 兼容的各种格式的代码覆盖率报告。
  2. 配置 Azure Pipelines: 在 Azure DevOps 门户中,导航到 Azure DevOps 项目并选择要在其中添加代码覆盖率的管道。 编辑管道配置,并添加用于安装依赖项并生成项目的步骤。
  3. 添加代码覆盖率任务: 将任务添加到管道,以运行启用了代码覆盖率的测试并生成覆盖率报告。 为测试运行程序使用适当的命令行参数启用代码覆盖率分析,并为覆盖率报告指定输出格式。
  4. 发布代码覆盖率报告:将生成的代码覆盖率报告作为工件发布,或将其附加到管道运行。 使用 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#) 项目实现代码覆盖率:

  1. 设置测试和覆盖率工具: 与 Azure DevOps 一样,请使用支持代码覆盖率分析的测试框架。 验证这些工具是否可以以与 GitHub 兼容的格式生成代码覆盖率报告。
  2. 创建 GitHub Actions 工作流: GitHub 存储库页上,导航到 .github/workflows 目录。 创建新的 YAML 文件(例如,ci.yml),以定义工作流配置。 为工作流定义触发器,例如拉取请求或推送到特定分支。
  3. 配置工作流步骤: 定义工作流 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。