Tienes una suite de tests con Playwright o pytest que funciona de maravilla en tu portátil. El problema es justo ese: funciona en tu portátil. Si nadie se acuerda de ejecutarla antes de cada despliegue, no importa lo bien escrita que esté, en la práctica no está protegiendo nada.

Eso es lo que resuelve un pipeline de CI/CD: que los tests corran solos, en cada cambio de código, sin que nadie tenga que abrir un terminal para acordarse. De las 86 ofertas de QA activas que 17lab agrega automáticamente ahora mismo, CI/CD aparece de forma explícita en 17 (una de cada cinco), por delante de Cypress o Postman como tecnología mencionada.

Esta guía monta un pipeline real con GitHub Actions, la opción más directa si tu código ya vive en GitHub: cómo correr tests de Playwright y de pytest automáticamente, qué revisar cuando el pipeline falla y no es un bug de verdad, y cómo convertir eso en un "quality gate" que bloquea un merge roto. Si vienes de automatizar tests de API con pytest o de tu primer test con Playwright, este es el paso que le falta a esa suite para dejar de depender de que alguien se acuerde de correrla.

Qué es CI/CD y qué cambia de verdad para un QA

CI (integración continua) es la parte que le importa directamente a un QA: cada vez que alguien sube código, un sistema automático lo construye y corre la suite de tests contra ese cambio. CD (entrega o despliegue continuo) es el siguiente paso, publicar automáticamente el código que pasa esos tests, y suele ser terreno más de DevOps que de QA en un equipo pequeño.

El cambio real no es técnico, es de responsabilidad: cuando los tests corren a mano, la calidad depende de que una persona no se olvide. Cuando corren en CI, la calidad depende de una regla que no se salta nunca, sin importar quién suba el código o a qué hora.

17 de 86

Ofertas de QA activas en España que mencionan CI/CD como tecnología, agregadas automáticamente por 17lab a partir de Adzuna, Remotive, RemoteOK, Himalayas y Jooble. Por delante de Cypress (10) y Postman (10) en la misma lista.

Datos propios de 17lab, ofertas agregadas el 21 de septiembre de 2026

El dato tiene un matiz honesto: en la mayoría de esas ofertas, CI/CD aparece como una tecnología más del stack, no como un requisito excluyente. Pero es una señal clara de que las empresas dan por hecho que un perfil de automatización sabe integrar sus tests en un pipeline, no solo escribirlos.

Por qué GitHub Actions como punto de partida

GitHub Actions corre directamente sobre el repositorio, sin instalar ni configurar un servidor aparte, y es gratuito sin límite de minutos en repositorios públicos, que es donde suele vivir un portfolio de QA. Un workflow es un archivo YAML dentro de la carpeta .github/workflows/ del propio proyecto: se versiona con Git, como cualquier otro archivo del código.

01
Trigger

Cuándo se dispara el workflow: en cada push, en cada pull request, o de forma manual.

on: push · on: pull_request
02
Job

Una máquina virtual limpia donde corre el trabajo. Un workflow puede tener varios jobs en paralelo.

ubuntu-latest · windows-latest
03
Step

Cada paso dentro de un job: descargar el código, instalar dependencias, correr los tests.

checkout · run · uses

Tu primer workflow: tests de Playwright en cada push

Este workflow corre la suite de Playwright cada vez que se sube código a la rama principal o se abre un pull request contra ella. Guárdalo como .github/workflows/tests.yml:

YAML .github/workflows/tests.yml
name: Tests

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

jobs:
  playwright:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test

Cada línea corresponde a algo que ya harías en local: descargar el código (checkout), instalar Node (setup-node), instalar las dependencias del proyecto (npm ci) y los navegadores de Playwright, y ejecutar la suite. La diferencia es que aquí corre en una máquina limpia, cada vez, sin depender de lo que tengas instalado en tu portátil.

Lo mismo con pytest

Si tu suite está en Python, el patrón es idéntico, solo cambia el lenguaje que se instala y el comando final. Como ya se explica en automatizar tests de API con pytest, pytest es un comando de terminal sin interfaz gráfica, así que corre igual en local que en cualquier pipeline:

YAML .github/workflows/tests-api.yml
name: Tests API

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

jobs:
  pytest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - run: pip install pytest requests
      - run: pytest -v

Si ambas suites viven en el mismo repositorio, puedes tener los dos workflows a la vez: GitHub Actions los ejecuta en paralelo, así que tener dos suites distintas no alarga el tiempo total del pipeline.

Cuando el pipeline falla y no es un bug real

La primera vez que un test pasa en local y falla en CI suele generar dudas sobre si el pipeline está mal montado. Casi nunca lo está: lo habitual es una diferencia de entorno, no un fallo del sistema.

Experiencia real · 17lab

El motivo más repetido que hemos visto para un "pasa en local, falla en CI" es un test que depende de algo que solo existe en el portátil de quien lo escribió: una variable de entorno que nunca se declaró en el workflow, una zona horaria distinta, o una carpeta de datos temporales que en local ya existía de una ejecución anterior. Revisar el paso de "instalar dependencias" del log del pipeline resuelve la mayoría de estos casos en minutos.

  • Variables de entorno o secretos ausentes. Una clave de API o una contraseña que en local lees de un archivo .env tiene que declararse como "secret" en GitHub y pasarse al workflow explícitamente, no se copia sola.
  • Dependencias del sistema operativo. Un test que asume una fuente instalada, un navegador concreto o una carpeta que ya existía en tu máquina puede no existir en la máquina virtual limpia de GitHub Actions.
  • Tests con orden implícito. Si un test depende de datos que dejó otro test anterior, cambiar el orden de ejecución (algo que sí puede pasar en CI) rompe el que depende de ese estado previo.
  • Timeouts demasiado ajustados. Una máquina virtual compartida puede ser más lenta que tu portátil en un momento puntual; un timeout pensado solo para local falla en CI sin que haya ningún bug real.

Quality gate: que no se pueda mergear código roto

Tener el pipeline en verde no sirve de mucho si de todas formas se puede fusionar un pull request con el pipeline en rojo. El paso que cierra el círculo es marcar ese check como obligatorio en la configuración de la rama (Settings → Branches → Branch protection rules → Require status checks to pass), para que GitHub bloquee el botón de merge hasta que los tests pasen.

Sin quality gate
  1. El pipeline falla en el pull request
  2. Alguien lo ve (o no) en la lista de checks
  3. Se mergea igualmente "porque hay prisa"
  4. El bug llega a la rama principal
Con quality gate

El botón de merge no existe hasta que el pipeline está en verde.

Cómo se traduce esto en tu portfolio o en una entrevista

Un repositorio con un workflow de GitHub Actions funcionando (visible como una insignia verde en el README, o como historial de ejecuciones en la pestaña "Actions" del repo) es una prueba concreta de que sabes integrar tests en un flujo real, no solo escribirlos sueltos. Es exactamente el tipo de detalle que separa un portfolio de QA genérico de uno que demuestra cómo trabajarías en un equipo de verdad.

Según el World Quality Report 2025-26 de Capgemini y Sogeti (2.000 ejecutivos encuestados en 23 países), solo un 8% de las organizaciones tiene ya una estrategia de automatización de pruebas madura y basada en KPIs, frente a un 47% que todavía está en transición hacia ella. Es un dato global, no específico de España, pero confirma algo que se ve también en las ofertas locales: saber automatizar tests no es raro, saber integrarlos de forma sólida en un pipeline sigue siéndolo.

Preguntas frecuentes

¿Necesito saber DevOps para montar un pipeline de CI/CD?

No. Un workflow básico de GitHub Actions para correr tests es un archivo YAML de 10-15 líneas que describe cuándo correr los tests y qué comandos ejecutar, los mismos comandos que ya usarías en tu terminal. No hace falta gestionar servidores ni infraestructura.

¿GitHub Actions es gratis?

Sí, sin límite de minutos en repositorios públicos, que es donde suele vivir un portfolio de QA. En repositorios privados hay una cuota mensual gratuita y luego se paga por minuto, pero para un proyecto personal de testing no suele hacer falta.

¿Esto funciona igual con GitLab CI o Jenkins?

El concepto es el mismo (definir cuándo correr los tests y qué comandos ejecutar), pero la sintaxis cambia: GitLab CI usa un archivo .gitlab-ci.yml y Jenkins usa un Jenkinsfile. GitHub Actions es el punto de partida más simple si tu código ya vive en GitHub.

¿Puedo correr tests de Playwright y de pytest en el mismo repositorio?

Sí, cada uno en su propio job dentro del mismo workflow, o en workflows separados. GitHub Actions los ejecuta en paralelo por defecto, así que no se alarga el tiempo total solo por tener dos suites distintas.

¿Qué pasa si mis tests tardan mucho y agotan los minutos gratis?

En repos públicos no hay ese problema. En repos privados, la forma habitual de reducir minutos es correr solo la suite completa en la rama principal y un subconjunto rápido en cada pull request, o paralelizar los tests en varios jobs.

¿Un pipeline en verde garantiza que no hay bugs?

No. Un pipeline en verde solo confirma que los tests que existen pasan. Si la suite no cubre un caso, ese bug pasa igual, con o sin CI/CD. El pipeline automatiza la ejecución, no sustituye el diseño de casos de prueba.

¿Quieres construir suites de automatización profesionales?

El curso de automatización avanzada de 17lab tiene una pista completa de pytest + Playwright, con fixtures, Page Object Model y CI/CD sobre un proyecto real.