EN·ES·PT
Automatización de pruebas · protocolo anti-flake

Una suite inestable es peor que no tener ninguna.

Cuando un run en rojo es solo ruido, los ingenieros dejan de leerlo — y la única vez que el rojo sí señala una regresión real, esta se cuela directa hasta producción. La inestabilidad no es una molestia; es el fracaso de todo el gate. Este es el protocolo que uso para llevar una suite de rojo-como-ruido a rojo-como-señal: diagnosticar las causas, poner en cuarentena y establecer una política de reintentos, corregir el aislamiento — y conservar las pruebas que usted ya escribió.

Véalo · automatización de pruebas y CI en ~45 s
10% → <1%
Tasa de flake de HighStrike, flujos de trading en vivo
500+
pruebas estabilizadas sobre flujos de mercado reales
37 / 37
specs en verde · 0 flakes · 15,3 s (suite pública)
4h → 75min
Regresión de Home Depot, 2300+ tiendas

Cada cifra aquí proviene de trabajo real. Las públicas enlazan al recibo — la suite de Playwright está en GitHub y el propio QA de este sitio se ejecuta en vivo en eval.html; las cifras de HighStrike y Home Depot provienen de roles previos a tiempo completo y son autoinformadas. Sin números de demo redondeados hacia arriba.

El costo real · por qué debería importarle a un comprador

El ruido no solo desperdicia tiempo. Oculta el único fallo que importaba.

El colapso de la confianza

Una tasa de flake del 10 % en una suite de 500 pruebas significa decenas de rojos falsos por run. Los ingenieros aprenden a pulsar «volver a ejecutar» por reflejo — y el hábito que borra el ruido también borra la única regresión real oculta en él.

El impuesto a la velocidad

Cada rojo inestable es un cambio de contexto: investigar, descartar, reintentar, esperar. Multiplique eso por todo un equipo y un día, y la suite que construyó para ir más rápido es lo que ralentiza cada merge.

El gate que no lo es

Un gate de CI solo lo protege si el rojo se cree. Una vez que es ruido, el gate es decorativo — está desplegando a ciegas, confiando en la suerte, con un dashboard verdoso que da falsa confianza.

El cambio · qué transforma el protocolo

De rojo-como-ruido a rojo-como-señal.

El objetivo no es una suite siempre en verde. Es una suite donde un run en rojo significa algo — para que el equipo lo lea, confíe en él y se detenga cuando se dispara.

Pipeline inestable frente a pipeline estable Un pipeline inestable emite runs rojos aleatorios que se tratan como ruido y se vuelven a ejecutar. El protocolo anti-flake — diagnosticar, poner en cuarentena, establecer política de reintentos, corregir el aislamiento — lo convierte en un pipeline estable donde un run en rojo es una señal confiable que bloquea el despliegue. ANTES — EL ROJO ES RUIDO Rojos aleatorios → «solo vuelve a ejecutarlo» → la regresión real se cuela PROTOCOLO ANTI-FLAKE 1 · Diagnosticar causas 2 · Cuarentena + reintentos 3 · Corregir el aislamiento DESPUÉS — EL ROJO ES SEÑAL bug real GATE DE CI rojo = bloqueado, creído DESPLEGAR Se confía en el verde. La suite que conservó sigue corriendo. BLOQUEADO La regresión real queda atrapada.
run que pasa run que falla el gate
El protocolo no borra sus pruebas — hace que su veredicto vuelva a ser confiable.
El diagnóstico · causa del flake → corrección

La mayor parte de la inestabilidad viene de cuatro lugares.

La inestabilidad rara vez es aleatoria — es un síntoma con una causa. El protocolo empieza por nombrar cuál tiene, porque la corrección es distinta para cada una. Este es el mapa con el que trabajo.

Causa del flake → señal reveladora → corrección
CausaCómo se manifiestaLa corrección
Temporización y carreras Pasa localmente, falla en CI; falla bajo carga; se «arregla» añadiendo un sleep(). Reemplace las esperas fijas con esperas basadas en estado (web-first assertions, poll-until-condition). Nunca espere al reloj — espere a la aplicación.
Estado compartido Falla solo cuando se ejecuta junto con otras pruebas; un registro «envenenado» de una prueba anterior se filtra. Aísle cada prueba: fixtures frescos, datos únicos por run, teardown que realmente limpie. Ninguna prueba debería depender de que otra se haya ejecutado.
Dependencia del orden Verde en un orden, rojo cuando el runner baraja o paraleliza. Haga las pruebas independientes del orden y seguras en paralelo: sin dependencia de la secuencia de ejecución, sin singletons globales mutados entre specs.
Entorno y datos Depende de un tercero en vivo, una fila sembrada, una hora del día o las condiciones de la red. Controle el límite: seeds deterministas, externos mockeados o probados por contrato, relojes congelados donde el comportamiento sea sensible al tiempo.

Este es el mismo diagnóstico que llevó la suite de HighStrike de una tasa de flake del 10 % a menos del 1 % — sobre más de 500 pruebas corriendo contra flujos de trading en vivo, donde un rojo falso es caro y uno real omitido es peor.

El protocolo · cómo transcurre el trabajo

Cuarentena primero. Corregir después. Nunca borrar la suite.

1 · Carril de cuarentena
  • Los specs conocidos como inestables pasan a un carril separado y no bloqueante — el CI se vuelve verde-confiable de inmediato
  • No se borra nada; cada prueba en cuarentena es una deuda registrada con un responsable
  • La suite bloqueante solo contiene pruebas en las que puede creer hoy
2 · Política de reintentos
  • Un reintento acotado y medido — no un reintento indiscriminado que oculta fallos reales
  • Los reintentos se cuentan: un spec que solo pasa al reintentar se marca, no se celebra
  • La tasa de flake se convierte en una métrica en el dashboard, para que no pueda regresar en silencio
3 · Correcciones de aislamiento
  • Reduzca el carril de cuarentena causa por causa usando la matriz de arriba
  • Cada spec corregido regresa a la suite bloqueante, probado como estable
  • Termina con la misma cobertura con la que empezó — ahora confiable
▸ cómo construyo automatización de pruebas y CI Certificado ISTQB CT-AI + Test Automation Engineer
La prueba · no una afirmación, un enlace

Una suite pública que corre en verde, rápido y sin flakes.

La suite pública de regresión

Una suite SDET abierta en Playwright que puede leer y ejecutar: 37 de 37 specs pasando, 0 flakes, run completo de 15,3 segundos. Web-first assertions, fixtures aislados, seguros en paralelo — el protocolo de esta página, en código que puede inspeccionar.

37/37 specs0 flakes15,3 sPlaywright
Este sitio se hace QA a sí mismo

El sitio que está leyendo ejecuta su propio QA — más de 100 checks, accesibilidad axe-clean — y aloja una demo de eval en vivo. La prueba por encima de las afirmaciones es toda la tesis, así que la prueba está a un clic, no en un PDF de caso de estudio.

100+ checksaxe-cleandemo en vivo
Relacionado · más sobre probar IA

¿Tiene una suite en la que el equipo dejó de confiar?

Reserve una llamada y diagnosticaremos las causas del flake en su suite real — luego la ponemos en cuarentena, la corregimos y se la devolvemos como un gate donde el rojo vuelve a significar algo.

Reservar una llamada → Servicio de automatización de pruebas y CI →
preguntas frecuentes

Preguntas, respondidas.

¿Qué causa realmente las pruebas inestables?
Casi siempre es estado compartido, temporización y condiciones de carrera, o dependencias del orden de ejecución de las pruebas — no mala suerte. Diagnostico la causa en lugar de reintentar a ciegas.
¿Solo añade reintentos?
Los reintentos son un parche que oculta la señal. Instalo un carril de cuarentena y una política de reintentos mientras corrijo la causa raíz — aislamiento, esperas, fixtures.
¿Van a reconstruir toda nuestra suite?
Rara vez. Conservar su suite existente y hacerla confiable es más rápido y más barato; una reconstrucción es el último recurso, no el primer movimiento.
¿Qué resultado puedo esperar?
Una suite rápida y estable donde el rojo significa rojo. En un rol previo a tiempo completo reduje la tasa de flake de una suite en producción de ~10 % a menos del 1 % y el tiempo de ejecución de 45 a 8 minutos (autoinformado).
¿Cómo miden nuestra tasa real de flake antes de empezar?
Vuelvo a ejecutar su suite a lo largo de muchas pasadas de CI sobre código sin cambios y cuento las pruebas que alternan entre pasar y fallar. Eso da una tasa real de flake y una lista priorizada de los peores casos antes de tocar nada.
¿Cuál es la política de cuarentena? ¿Se desactivan las pruebas inestables?
Las pruebas inestables pasan a un carril de cuarentena, no a la basura. Siguen ejecutándose y reportando, pero dejan de bloquear el pipeline principal mientras corrijo la causa raíz, y luego regresan una vez que se mantienen estables.
¿Cuánto tarda en bajar de uno por ciento?
Depende del tamaño de la suite y de qué tan profundas sean las causas del flake. Pongo en cuarentena pronto para que su pipeline se vuelva confiable rápido, y luego trabajo las correcciones de causa raíz en orden de prioridad.
¿Funciona con nuestra suite existente o requiere una reescritura?
Funciona con su suite existente. Ya sea que use Playwright, Pytest u otro framework, estabilizo lo que ya tiene en lugar de empezar de cero — una reconstrucción es el último recurso.
¿Cómo encuentran la causa raíz de una prueba inestable?
Aíslo la prueba que falla, la ejecuto en orden y fuera de orden, e inspecciono el estado compartido, la temporización y los fixtures hasta que el fallo se reproduce a voluntad. Un flake que puede reproducir es un bug que puede corregir.
¿Con qué nos quedamos al final que evite que el flake regrese?
Una suite estabilizada más las barreras de protección que la mantienen así — un carril de cuarentena, una política de reintentos y patrones de aislamiento que su equipo aplica a las pruebas nuevas. La señal sigue siendo confiable después de que me voy.