Skip to main content

Configurar la cobertura de código para tu repositorio

Cargue los informes de cobertura de pruebas para ver los resultados de cobertura directamente en las solicitudes de incorporación de cambios, lo que ayuda a los revisores a identificar código no probado antes de la combinación.

¿Quién puede utilizar esta característica?

Propietarios de repositorios, propietarios de la organización y usuarios con el rol de administrador

GitHub Team o GitHub Enterprise Cloud

Nota:

GitHub Code Quality está actualmente en versión preliminar pública y sujeto a cambios. Durante versión preliminar pública, Code Quality no se facturará, aunque los escaneos de Code Quality consumirán minutos de GitHub Actions.

En los procedimientos siguientes, generará un informe XML de cobertura Cobertura a partir de su conjunto de pruebas, lo cargará en GitHub y verá los resultados de cobertura en sus pull requests.

Prerrequisitos

  • Code Quality está habilitado en tu repositorio.
  • El repositorio tiene un conjunto de pruebas que se ejecuta en GitHub Actions.
  • Su marco de pruebas puede generar un informe de cobertura en formato XML Cobertura.

Paso 1: Generar un informe XML de cobertura Cobertura

Configura el marco de pruebas para generar un informe de cobertura en formato XML de Cobertura. La cobertura de código funciona con cualquier lenguaje de programación que pueda generar este formato.

  1. Identifique la herramienta de cobertura del idioma de la tabla siguiente.
  2. Añada el comando o la configuración adecuados al flujo de trabajo de CI para que se genere un archivo XML de Cobertura cada vez que se ejecuten las pruebas.
IdiomaMarco de trabajo / HerramientaCómo generar Cobertura XML
Pythonpytest + pytest-covpytest --cov=. --cov-report=xml
JavaJaCoCoUtilizar el cover2cover.py script o el complemento de Gradle/Maven JaCoCo-to-Cobertura
JavaScript/TypeScriptEstambul / nycnyc report --reporter=cobertura
RubySimpleCovAgregue SimpleCov::Formatter::CoberturaFormatter.
Gogo test + gocover-coberturago test -coverprofile=cover.out && gocover-cobertura < cover.out > coverage.xml

Sugerencia

Si tu framework no aparece en la lista anterior, consulta su documentación para ver si admite la salida en formato Cobertura. Muchas herramientas lo admiten directamente o pueden convertir a Cobertura XML desde otros formatos.

Paso 2: Cargar el informe de cobertura

Después de que las pruebas generen un informe XML de Cobertura, cárguelo en GitHub para que los resultados de cobertura aparezcan en las solicitudes de extracción.

  1. Abra el archivo de flujo de trabajo de CI del repositorio (por ejemplo, .github/workflows/ci.yml).

  2. Agregue el paso siguiente después del paso que ejecuta las pruebas y genere el informe de cobertura:

    YAML
    - name: Upload coverage report
      if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
      uses: actions/upload-code-coverage@v1
      with:
        file: COVERAGE-FILE-PATH.xml
        language: LANGUAGE
        label: LABEL
    
  3. Reemplace los valores siguientes:

    • COVERAGE-FILE-PATH.xml: ruta de acceso al informe XML de Cobertura (por ejemplo, coverage.xml o target/site/jacoco/cobertura.xml).
    • LANGUAGE: el lenguaje principal del código que se trata (por ejemplo, Python, Java, JavaScript).
    • LABEL: etiqueta opcional para identificar este informe de cobertura (por ejemplo, code-coverage/pytest).
  4. Haz un commit y envía el cambio en el flujo de trabajo.

Ejemplo de flujo de trabajo completo

En este ejemplo se ejecutan pruebas Python con pytest-cov y se carga el informe de cobertura:

YAML
name: Code Coverage

This workflow runs your test suite, generates a Cobertura XML coverage report, and uploads it to GitHub. Once this workflow is committed, coverage results appear automatically on every pull request.

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

Run on pushes to the default branch (to establish the baseline) and on pull requests (to compare against it). Code Quality compares PR branch coverage to the default branch, so both triggers are needed.

permissions:
  contents: read
  code-quality: write
jobs:
  test:
    runs-on: ubuntu-latest
    steps:

The code-quality: write permission is required to upload coverage data. No other elevated permissions are needed.

      - uses: actions/checkout@v6
        with:
          ref: ${{ github.event.pull_request.head.sha || github.sha }}

Check out the PR head commit (not the merge commit) so coverage line numbers map correctly to the diff.

      - uses: actions/setup-python@v5
        with:
          python-version: "3.x"
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install pytest pytest-cov

Replace this step with whatever language setup your project uses (Node.js, Java, Go, etc.). The upload action works with any language that produces a Cobertura XML report.

      - name: Run tests with coverage
        run: pytest --cov=. --cov-report=xml

Adapt this step for your test framework. The key requirement is producing a Cobertura XML file. For other languages, see the framework table earlier in this article.

      - name: Upload coverage report
        if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
        uses: actions/upload-code-coverage@v1
        with:
          file: coverage.xml
          language: Python
          label: code-coverage/pytest

This step replaces any third-party coverage upload (Codecov, Coveralls, etc.). After this runs, the github-code-quality[bot] bot posts a coverage summary directly on the pull request.

# This workflow runs your test suite, generates a Cobertura XML coverage report, and uploads it to GitHub. Once this workflow is committed, coverage results appear automatically on every pull request.
name: Code Coverage

# Run on pushes to the default branch (to establish the baseline) and on pull requests (to compare against it). Code Quality compares PR branch coverage to the default branch, so both triggers are needed.
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

# The `code-quality: write` permission is required to upload coverage data. No other elevated permissions are needed.
permissions:
  contents: read
  code-quality: write

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # Check out the PR head commit (not the merge commit) so coverage line numbers map correctly to the diff.
      - uses: actions/checkout@v6
        with:
          ref: ${{ github.event.pull_request.head.sha || github.sha }}

      # Replace this step with whatever language setup your project uses (Node.js, Java, Go, etc.). The upload action works with any language that produces a Cobertura XML report.
      - uses: actions/setup-python@v5
        with:
          python-version: "3.x"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install pytest pytest-cov

      # Adapt this step for your test framework. The key requirement is producing a Cobertura XML file. For other languages, see the framework table earlier in this article.
      - name: Run tests with coverage
        run: pytest --cov=. --cov-report=xml

      # This step replaces any third-party coverage upload (Codecov, Coveralls, etc.). After this runs, the `github-code-quality[bot]` bot posts a coverage summary directly on the pull request.
      - name: Upload coverage report
        if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
        uses: actions/upload-code-coverage@v1
        with:
          file: coverage.xml
          language: Python
          label: code-coverage/pytest

Paso 3: Ver los resultados de cobertura en las pull requests

  1. Abra una solicitud de incorporación de cambios (o inserte en una existente) que desencadene el flujo de trabajo que configuró.
  2. Una vez completado el flujo de trabajo, busque un comentario de github-code-quality[bot] en la solicitud de extracción. El comentario incluye:
    • Porcentaje de cobertura total de la rama de la solicitud de incorporación de cambios en comparación con la rama predeterminada.
    • Desglose por archivo en el que se muestran los archivos obtenidos o perdidos de cobertura.

Pasos siguientes