Qué es pytest y cómo empezar desde cero en Python

Trabajar con pytest es mucho más sencillo de lo que parece al principio. Es el framework de testing más usado en Python, y una vez que entiendes cómo funciona, se convierte en una herramienta que no quieres soltar.

En este artículo te explico qué es, para qué sirve y cómo escribir tus primeros tests desde cero.


Qué es pytest

pytest es un framework de testing para Python que permite escribir, organizar y ejecutar pruebas automatizadas de forma sencilla. Es código abierto, tiene una comunidad enorme y es compatible con prácticamente cualquier tipo de proyecto Python.

Lo usan desde desarrolladores que quieren testear sus funciones hasta equipos QA que montan suites completas de automatización. Es flexible, potente y muy fácil de aprender.


Por qué pytest y no unittest

Python viene con su propio módulo de testing llamado unittest. Es funcional, pero verbose — necesitas escribir mucho código para hacer cosas simples.

pytest hace lo mismo con mucho menos código y de forma más legible. Por eso se ha convertido en el estándar de facto en el mundo Python.

Mira la diferencia:

Con unittest:

python

import unittest

class TestSuma(unittest.TestCase):
    def test_suma(self):
        self.assertEqual(2 + 2, 4)

if __name__ == "__main__":
    unittest.main()

Con pytest:

python

def test_suma():
    assert 2 + 2 == 4

Mismo resultado, mucho menos código.


Cómo instalar pytest

Si ya tienes Python instalado, instalar pytest es tan sencillo como ejecutar esto en PowerShell:

powershell

pip install pytest

Para verificar que está instalado correctamente:

powershell

pytest --version

Cómo funciona pytest

pytest busca automáticamente los archivos de test en tu proyecto. Para que los encuentre tienes que seguir estas convenciones:

  • Los archivos de test deben llamarse test_algo.py o algo_test.py
  • Las funciones de test deben empezar por test_

Si sigues estas reglas, pytest encuentra y ejecuta todos los tests sin que tengas que decirle dónde están.


Tu primer test con pytest

Crea un archivo llamado test_primero.py y escribe esto:

python

def test_suma():
    assert 2 + 2 == 4

def test_resta():
    assert 10 - 3 == 7

def test_texto():
    nombre = "Fátima"
    assert "át" in nombre

Para ejecutarlo, abre PowerShell en la carpeta donde está el archivo y escribe:

powershell

pytest test_primero.py
```

Verás algo así:
```
3 passed in 0.12s

Si algún test falla, pytest te dice exactamente qué esperabas y qué obtuviste. Eso es lo que lo hace tan útil para el debugging.


Comandos básicos que usarás siempre

powershell

# Ejecutar todos los tests del proyecto
pytest

# Ejecutar un archivo específico
pytest test_primero.py

# Ejecutar un test específico dentro de un archivo
pytest test_primero.py::test_suma

# Ver más detalle de la ejecución
pytest -v

# Parar al primer fallo
pytest -x

# Ver los prints dentro de los tests
pytest -s

Fixtures: la funcionalidad más importante de pytest

Las fixtures son funciones que preparan el contexto que necesitan tus tests. Por ejemplo, si varios tests necesitan una conexión a una base de datos o un usuario de prueba, la fixture lo configura una vez y lo pasa a cada test que lo necesite.

python

import pytest

@pytest.fixture
def usuario_prueba():
    return {"nombre": "Fátima", "email": "fatima@test.com"}

def test_nombre_usuario(usuario_prueba):
    assert usuario_prueba["nombre"] == "Fátima"

def test_email_usuario(usuario_prueba):
    assert "@" in usuario_prueba["email"]

Las fixtures evitan repetir código de configuración en cada test y hacen las suites mucho más limpias y mantenibles.


Markers: organiza tus tests por categorías

Los markers permiten etiquetar los tests para ejecutarlos por grupos. Muy útil cuando tienes suites grandes y quieres ejecutar solo los tests de smoke, o solo los de regresión.

python

import pytest

@pytest.mark.smoke
def test_login():
    assert True

@pytest.mark.regression
def test_carrito():
    assert True

Para ejecutar solo los tests marcados como smoke:

powershell

pytest -m smoke

pytest con Playwright

Si has leído el artículo anterior sobre cómo instalar Playwright, ya tienes instalado el plugin pytest-playwright. Este plugin integra Playwright con pytest de forma nativa, lo que significa que puedes usar fixtures de Playwright directamente en tus tests.

python

from playwright.sync_api import Page

def test_titulo_web(page: Page):
    page.goto("https://fatimaqa.com")
    assert "Fátima" in page.title()

La fixture page la proporciona automáticamente el plugin — no tienes que configurar nada más.


El siguiente paso

Con pytest controlado ya tienes la base para montar una suite de automatización seria. El siguiente artículo del blog explica cómo usar Postman para hacer tus primeras pruebas de API, otra herramienta imprescindible para cualquier QA Engineer.

Si quieres ver ejemplos reales de pytest con Playwright en proyectos completos, visita mi GitHub.

Y si necesitas ayuda con automatización de pruebas en tu proyecto, puedes ver mis servicios en fatimaqa.com.

Scroll al inicio