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.pyoalgo_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.
