GuíaIntermedio
Guía de Property-Based y Testing Avanzado
Aprende property-based testing con Hypothesis: en vez de escribir tests para los ejemplos que se te ocurrieron, defines una propiedad (un invariante) que debe cumplirse para TODA entrada, y dejas que Hypothesis genere y busque el caso que la rompe. Esta guía cubre el primer test con `@given` y las estrategias básicas, cómo describir el espacio de entradas con estrategias compuestas (`@st.composite`), los patrones para encontrar propiedades (invariante, round-trip, oráculo, metamórfica, idempotencia), el shrinking (cómo Hypothesis reduce un caso que falla al ejemplo mínimo), property-based testing con estado con `RuleBasedStateMachine`, y un ramo de técnicas avanzadas adicionales (fixtures parametrizadas, una probada de mutation testing, fuzzing). Cierra con un proyecto capstone: encontrar y corregir un bug real de Reservo usando property-based testing.
- 64
- lecciones
- 8
- módulos
- Inglés · Español
- disponible en
- Sí
- certificado
- Gratis
- acceso
Resultados
Lo que vas a poder hacer
- Distinguir los tests por ejemplo de property-based testing: probar un invariante para TODA entrada, no solo las que imaginaste
- Escribir el primer test con Hypothesis usando `@given` y estrategias básicas (`st.integers`, `st.floats`, `st.text`, `st.datetimes`)
- Describir el espacio de entradas con estrategias compuestas: `@st.composite`, `map`/`filter`/`flatmap` y `assume()`
- Reconocer los patrones para encontrar propiedades: invariante, round-trip, oráculo, metamórfica e idempotencia
- Leer el shrinking: cómo Hypothesis reduce un caso que falla hasta el ejemplo mínimo, y fijar regresiones con `@example`
- Modelar un sistema con estado y verificar invariantes a través de secuencias de operaciones con `RuleBasedStateMachine`
- Conocer técnicas avanzadas adicionales: fixtures parametrizadas, una probada de mutation testing y la relación entre fuzzing y property-based testing
- Encontrar y corregir un bug real de Reservo usando property-based testing como proyecto capstone
Antes de empezar
Qué necesitas traer
Es para ti si...
- Devs que ya escriben tests por ejemplo con pytest y quieren encontrar bugs que esos tests no cazan
- Devs con funciones de lógica pura (cálculos, validaciones, transformaciones) donde importa cubrir el espacio de entradas completo
- Devs que ya dominan los fundamentos de testing y quieren dar el salto a técnicas avanzadas
Requisitos y materiales
- pytest, asserts, fixtures básicas y parametrize simple (o Guía de Testing Fundamentals & TDD completada)
- Python 3.10+ con pip para instalar la librería `hypothesis`
- Cómoda lectura de funciones de lógica pura en Python
Contenido
El temario, módulo por módulo
Abre cualquiera para ver sus lecciones.
- 1. Presentación del módulo: del ejemplo a la propiedad
- 2. El límite del test por ejemplo
- 3. Qué es una propiedad (un invariante)
- 4. Las propiedades escondidas en Reservo
- 5. Propiedad contra ejemplo, lado a lado
- 6. Por qué las máquinas encuentran los casos raros
- 7. El costo y el beneficio
- 8. Mini-proyecto: tres propiedades de `refund_cents` chequeadas a mano
- 1. Presentación del módulo: del bucle a mano a Hypothesis
- 2. Instalar Hypothesis y tu primera propiedad verde
- 3. El decorador `@given` y tu primera propiedad de Reservo
- 4. Estrategias de enteros y rangos
- 5. `st.floats` y sus trampas: `nan`, `inf` y el redondeo
- 6. Estrategias de texto y de fechas
- 7. Leer el ejemplo falsificador (`Failing test case`)
- 8. Mini-proyecto: tres propiedades de Reservo con `@given`
- 1. Presentación del módulo: de un valor suelto a todo el espacio de entradas
- 2. Estrategias como valores: rangos, `sampled_from` y `one_of`
- 3. Construir objetos con `st.builds`
- 4. `@st.composite`: ensamblar un `Booking` coherente
- 5. Transformar con `.map()`
- 6. `.filter()` y `assume()`: descartar lo que no sirve
- 7. `.flatmap()` y estrategias dependientes
- 8. Mini-proyecto: una estrategia de reservas válidas y una propiedad sobre ellas
- 1. Presentación del módulo: del contraejemplo feo al reproductor mínimo
- 2. Qué es el shrinking y por qué importa
- 3. El shrinking en acción: un bug de Reservo
- 4. Leer el ejemplo mínimo
- 5. `@example` para clavar una regresión
- 6. La base de datos de fallos y el determinismo
- 7. `settings`: ajustar cuántos, cuánto y qué fases
- 8. Mini-proyecto: encoge un bug sutil de Reservo
- 1. Presentación del módulo: propiedades sobre secuencias, no sobre una llamada
- 2. Por qué el estado lo cambia todo
- 3. `RuleBasedStateMachine`: la máquina mínima
- 4. `@rule` para `book` y `cancel`
- 5. `Bundle`: pasar reservas entre reglas
- 6. `@invariant`: lo que siempre debe valer
- 7. Una secuencia que rompe un invariante
- 8. Mini-proyecto: modela el Calendar y encuentra un bug
- 1. Presentación del módulo: la caja de herramientas más allá de Hypothesis
- 2. Parametrize indirecto y `pytest.param`
- 3. Apilar parametrize: el producto cartesiano
- 4. Fixture factories
- 5. Fixtures parametrizadas y scope
- 6. Mutation testing a mano: ¿tu suite caza bugs?
- 7. Fuzzing vs property-based
- 8. Mini-proyecto: una fixture factory, una tabla y un mutante
- 1. Presentación del módulo: el ciclo completo de cazar un bug
- 2. Elegir la función sospechosa
- 3. Escribir la primera propiedad
- 4. Verla fallar: el ejemplo falsificador
- 5. Encoger al mínimo: el reproductor más pequeño
- 6. Diagnosticar y arreglar
- 7. Clavar el bug con un `@example` de regresión
- 8. Proyecto: encuentra un bug real con property-based
Dudas frecuentes
Lo que suele preguntarse
Sin límite. Es una guía gratuita: entras cuando quieras, las veces que quieras.
No. Los módulos están ordenados de menos a más, pero puedes saltar al que necesites. Tu progreso se guarda por lección.
Lo que haga falta está en «Qué necesitas traer», arriba. Si no aparece nada ahí, puedes empezar desde cero.
En el grupo de WhatsApp del Club, y cada quince días hay un live con un instructor donde se resuelven dudas en vivo.
Sí. Al terminar todas las lecciones se emite automáticamente, con un código verificable que puedes compartir en LinkedIn.
Empieza cuando quieras
Lo que dicen los estudiantes
Estas reseñas son de estudiantes inscritos que completaron al menos el 50% del curso. Moderamos las reseñas solo por motivos de contenido (spam, lenguaje ofensivo, datos personales), nunca por ser críticas o negativas.
Aún no hay reseñas aprobadas.
¡Sé el primero en compartir tu experiencia!