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.
- Identifique la herramienta de cobertura del idioma de la tabla siguiente.
- 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.
| Idioma | Marco de trabajo / Herramienta | Cómo generar Cobertura XML |
|---|---|---|
| Python | pytest + pytest-cov | pytest --cov=. --cov-report=xml |
| Java | JaCoCo | Utilizar el cover2cover.py script o el complemento de Gradle/Maven JaCoCo-to-Cobertura |
| JavaScript/TypeScript | Estambul / nyc | nyc report --reporter=cobertura |
| Ruby | SimpleCov | Agregue SimpleCov::Formatter::CoberturaFormatter. |
| Go | go test + gocover-cobertura | go 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.
-
Abra el archivo de flujo de trabajo de CI del repositorio (por ejemplo,
.github/workflows/ci.yml). -
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- 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 -
Reemplace los valores siguientes:
COVERAGE-FILE-PATH.xml: ruta de acceso al informe XML de Cobertura (por ejemplo,coverage.xmlotarget/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).
-
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:
# 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
name: Code CoverageThis 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-covReplace 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=xmlAdapt 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/pytestThis 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
- Abra una solicitud de incorporación de cambios (o inserte en una existente) que desencadene el flujo de trabajo que configuró.
- 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
- Interprete los resultados: Comprenda las métricas de cobertura y el desglose por archivo en sus pull requests. Consulte Análisis de los resultados de calidad del código para tu repositorio.