Ejecuta pruebas con Integración Continua#

Ejecutar tu conjunto de pruebas localmente es útil mientras desarrollas código y ademásayuda mientras añades nuevas características o cambias el código. Sin embargo, también debes considerar la Integración Continua (CI) para ejecutar tus pruebas en línea. La CI te permite ejecutar todas tus pruebas en la nube. Mientras que solo puedes ejecutar pruebas localmente en un sistema operativo específico (el de tu ordenador), utilizando CI puedes hacer con que tus pruebas se ejecuten en diferentes versiones de Python y en diferentes sistemas operativos.

La CI también se puede activar cuando tu repositorio recibe pull requests y pushes. Esto significa que cada pull request que tú, tu equipo de mantenimiento o un contribuidor envíe, es probado automaticamente. Al final, las pruebas de CI aseguran que tu código sigue funcionando como se espera incluso mientras se realizan cambios.

CI y pull requests#

La CI es invaluable si tienes colaboradores externos contribuyendo a tu proyecto. Puedes configurar la CI para que se ejecute en todos los pull requests enviados a tu repositorio, haciendo que tu repositorio sea más accesible a nuevos colaboradores. CI permite a los usuarios contribuir con código, correcciones de documentación y más sin tener que crear entornos de desarrollo, ejecutar pruebas y construir documentación localmente.

Example GitHub Actions that runs tests#

Below is an example GitHub Actions that runs tests using nox across both Windows, Mac and Linux and on Python versions 3.9-3.11.

Para funcionar correctamente, este archivo debe estar ubicado en el directorio raíz de tu repositorio de GitHub:

pyospackage/
├──.github/
   └── workflows/
       └── run-tests.yml # The name of this file can be whatever you wish
name: Pytest unit/integration

on:
  pull_request:
  push:
    branches:
      - main

# Use bash by default in all jobs
defaults:
  run:
    shell: bash

jobs:
  build-test:
    name: Test Run (${{ matrix.python-version }}, ${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: ["ubuntu-latest", "macos-latest", "windows-latest"]
        python-version: ["3.9", "3.10", "3.11"]

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install nox
      - name: List installed packages
        run: pip list
      - name: Run tests with pytest & nox
        run: |
          nox -s tests-${{ matrix.python-version }}
      # You only need to upload code coverage once to codecov unless you have a
      # more complex build that you need coverage for.
      - name: Upload coverage to Codecov
        if: ${{ matrix.os == 'ubuntu-latest' &&  matrix.python-version == '3.10'}}
        uses: codecov/codecov-action@v3