TwinStub lleva la simulación de API con estado y determinista a las pruebas locales
Una nueva herramienta de código abierto modela flujos de integración complejos como máquinas de estados, permitiendo a los desarrolladores probar eventos raros de webhooks y casos límite localmente sin depender de la nube.
Traducido automáticamente del original en inglés.
Ha surgido un nuevo proyecto de código abierto llamado TwinStub para ayudar a los equipos de desarrollo a simular integraciones de API complejas localmente. Lanzado en GitHub en octubre de 2026, esta herramienta permite a los ingenieros definir escenarios con estado en archivos YAML que se reproducen como servidores HTTP reales. Está diseñada específicamente para equipos que construyen software que interactúa con proveedores externos, como pasarelas de pago o plataformas logísticas.
Qué ha ocurrido
TwinStub aborda un punto de dolor común en el desarrollo de software: probar los caminos infelices (unhappy paths) de las integraciones de terceros. Cuando las empresas construyen sistemas que dependen de APIs externas, sus errores más difíciles suelen ocurrir no durante operaciones estándar, sino durante eventos raros como contracargos, fallos en la verificación de identidad o webhooks retrasados. Los servidores mock tradicionales suelen manejar una solicitud a la vez y carecen de memoria, lo que dificulta simular una secuencia de eventos que se despliega a lo largo de días o semanas.
Esta nueva herramienta modela una integración como una máquina de estados. Mantiene el estado de la sesión, lo que significa que un endpoint específico puede devolver diferentes respuestas basándose en interacciones previas. Por ejemplo, una solicitud para comprobar el estado de un pago podría devolver inicialmente "processing" (procesando), luego "succeeded" (exitoso) y finalmente "chargeback" (contracargo) a medida que avanza la línea de tiempo simulada. Esto permite a los desarrolladores comprimir procesos a largo plazo en segundos para fines de prueba. La herramienta se ejecuta como un único binario escrito en Go, no requiere registro en la nube ni servicios externos y se distribuye bajo una licencia MIT.
La propuesta de valor central es que TwinStub actúa como sustituto del proveedor externo. El código bajo prueba es la propia aplicación cliente, que debe manejar solicitudes, analizar respuestas, verificar firmas de webhooks y actualizar libros internos. Al simular al proveedor, los desarrolladores pueden activar ramas de su código que de otra manera serían difíciles de alcanzar, como el manejo de entregas de eventos fuera de orden o la verificación de firmas HMAC en webhooks entrantes. El proyecto incluye una interfaz de línea de comandos para servir simulaciones, validar archivos de configuración e inicializar escenarios de demostración.
Detalles clave
- Simulaciones con estado: A diferencia de los mocks estáticos, TwinStub utiliza sesiones identificadas por cabeceras, parámetros de consulta o campos del cuerpo para rastrear el estado de cada interacción del cliente a lo largo del tiempo.
- Cadenas de webhooks: Admite webhooks firmados con HMAC y retrasados, con reintentos exponenciales y jitter, imitando el comportamiento de grandes proveedores como Stripe.
- Compresión temporal: Los desarrolladores pueden usar una bandera de escala de tiempo para acelerar flujos de larga duración, convirtiendo procesos de treinta días en horas o minutos para pruebas rápidas.
- Despliegue de un solo binario: La herramienta es un binario Go autocontenido que se ejecuta localmente o en pipelines de integración continua sin requerir Java, Electron ni conectividad en la nube.
- Retroalimentación diagnóstica: Cuando una solicitud no coincide con ningún escenario definido, el servidor devuelve un mensaje de error detallado explicando qué coincidencias fallaron y por qué, ayudando en la depuración.
- Funciones de ingeniería del caos: Los usuarios pueden inyectar latencia, descartar conexiones TCP o devolver errores arbitrarios de servidor para probar cómo maneja su aplicación las fallas de transporte.
Contexto
Para entender la utilidad de TwinStub, ayuda distinguir entre el mocking simple y la simulación con estado. Un servidor mock básico responde a una URL específica con una carga útil predefinida. No recuerda lo que sucedió en solicitudes anteriores. Esto funciona bien para probar los caminos felices donde una sola solicitud produce una sola respuesta esperada. Sin embargo, las integraciones modernas suelen ser dirigidas por eventos y tener estado. Un pago puede ser autorizado, capturado, reembolsado y luego sufrir un contracargo semanas después. Cada paso cambia el estado de la transacción.
Los webhooks son notificaciones asincrónicas enviadas por servicios externos a su aplicación cuando ocurre un evento. Probar webhooks es notoriamente difícil porque requieren una URL públicamente accesible e involucran firmas criptográficas para garantizar la autenticidad. En un entorno de desarrollo local, recibir estos webhooks generalmente requiere servicios de túnel o configuraciones de red complejas. TwinStub simplifica esto actuando como el emisor, generando webhooks firmados que se disparan según el escenario definido. Esto permite a los desarrolladores probar sus manejadores de webhooks, incluida la verificación de firmas y la lógica de idempotencia, sin depender del servicio de terceros real.
Por qué importa
Para los equipos que ejecutan su propio software, la fiabilidad en las integraciones es crítica. Los errores en el código de integración a menudo conducen a discrepancias financieras, como cobrar dos veces a los clientes o no liberar inventario reservado tras un pago fallido. Estos problemas son costosos de corregir en producción y difíciles de reproducir en entornos de staging. Al proporcionar una forma determinista de simular estos eventos raros, TwinStub permite a los desarrolladores detectar estos errores antes del despliegue. Cambia la carga de pruebas de la verificación manual contra sandboxes en vivo a pruebas automatizadas que pueden ejecutarse en cada compilación.
Además, la capacidad de ejecutar estas simulaciones localmente sin dependencias en la nube mejora la seguridad y la velocidad. Los desarrolladores no necesitan compartir claves de API ni datos sensibles con servicios de mocking externos. El diseño de la herramienta asegura que el estado se mantenga en memoria, lo que significa que cada ejecución de prueba comienza desde cero, evitando la contaminación entre pruebas. Esta determinismo es esencial para los pipelines de integración continua, donde las pruebas inestables (flaky tests) pueden ralentizar la velocidad de desarrollo. La inclusión de un comando de validación permite a los equipos revisar sus definiciones de escenarios en busca de errores antes de ejecutarlos, asegurando que la simulación refleje con precisión el comportamiento deseado.
Sin embargo, hay una limitación que reconocer. La exactitud de la simulación depende enteramente de la calidad de la definición del escenario YAML. Si el escenario modela incorrectamente el comportamiento del proveedor real, las pruebas pasarán incluso si el código es incorrecto para el mundo real. Por lo tanto, se recomienda validar las formas de las respuestas contra el sandbox del proveedor una vez, y luego usar TwinStub para explorar los casos límite que el sandbox no puede provocar fácilmente.
Qué puedes hacer
- Instala TwinStub usando la cadena de herramientas de Go o Docker para comenzar a simular interacciones de API en tu entorno local.
- Define tus escenarios de integración en YAML, centrándote en las transiciones de estado y las secuencias de webhooks en lugar de solo en respuestas estáticas.
- Usa la función de escala de tiempo para acelerar procesos de larga duración, permitiéndote probar flujos de trabajo de un mes en minutos.
- Implementa la verificación de firmas en tus manejadores de webhooks y usa la firma HMAC de TwinStub para asegurar que tu lógica de seguridad funcione correctamente.
- Ejecuta el comando de validación en tu pipeline de CI para detectar errores de configuración temprano y evitar que simulaciones rotas bloqueen las compilaciones.
- Prueba escenarios de caos inyectando latencia o caídas de conexión para verificar que tu aplicación maneje las fallas de red con elegancia.



