Guía 20

Pruebas de chatbots: tests unitarios, webhooks grabados, tests de conversación y evaluaciones de LLM

Los bots son handlers de eventos con efectos secundarios. Haz los handlers puros y la mayoría de las pruebas serán tests unitarios corrientes.

Guía2 min de lecturaActualizado

Estructura para poder probar

Divide cada bot en tres capas:

  • Adaptador: convierte el payload de la plataforma en tu propio tipo de evento y tus objetos de respuesta en llamadas a la API.
  • Lógica: funciones puras o una máquina de estados que recibe un evento y el estado y devuelve respuestas y cambios de estado.
  • Efectos: enviar mensajes, escribir en la base de datos, APIs externas.

La capa de lógica no necesita red ni tokens, así que se prueba rápido y a fondo. El diseñador de flujos ayuda a trazar los estados antes de escribirlos.

Tests unitarios

Prueba comandos, análisis de argumentos, permisos y casos límite: texto vacío, texto muy largo (consulta el divisor de mensajes), comandos desconocidos, idiomas inesperados y emojis.

import { handle } from "../src/logic.js";
test("remind interpreta la duración", () => {
  const out = handle({ type: "command", name: "remind", args: "10m té" }, {});
  expect(out.schedule.delayMs).toBe(600000);
});

Payloads grabados

Guarda cuerpos de webhooks reales (anonimizados) como fixtures y reprodúcelos a través del adaptador. Incluye mensajes editados, callback queries, mensajes en grupos, mensajes de servicio y payloads sin campos opcionales. Genera ejemplos realistas con el simulador de webhooks e inspecciónalos con el probador de JSONPath.

Simula la plataforma

  • Apunta el cliente de la API a un servidor falso local, o inyecta una interfaz de cliente y usa una implementación en memoria.
  • Comprueba las llamadas realizadas: método, ID de chat, texto, teclado.
  • Simula fallos: 429 con retry-after, 5xx, tiempos agotados. Verifica que los reintentos terminan y que nada se envía dos veces.

Tests de seguridad

  • Las peticiones sin firma o token secreto, o con uno incorrecto, deben recibir 401 y no causar efectos.
  • Las marcas de tiempo antiguas (repeticiones) deben rechazarse en plataformas que firman el tiempo, como Slack.

Tests de conversación

Escribe guiones de conversaciones de varios turnos ("el usuario dice, el bot debe responder algo que coincida") y ejecútalos contra la capa de lógica. Para funciones con LLM, comprueba estructura e intención en lugar del texto exacto.

Conjuntos de evaluación de LLM

Mantén un archivo versionado de entradas con propiedades esperadas: la llamada a herramienta correcta, una negativa, una cita, una longitud máxima, ausencia de datos personales. Ejecútalo con cada cambio de prompt, modelo o recuperación y compara resultados. Incluye entradas adversarias de defensa contra inyección de prompts.

Staging y carga

  • Registra un bot de staging con su propio token y chats de prueba. Nunca pruebes en el bot de producción.
  • Haz pruebas de carga de tu endpoint, no de la plataforma: reproduce fixtures a gran velocidad contra staging y vigila latencia y errores.

En CI

Ejecuta tests unitarios y de fixtures en cada push, bloquea los merges con fallos y lanza los conjuntos de evaluación cada noche o antes de cada versión. Consulta CI/CD para bots.

Comprueba lo aprendido

1. ¿Qué capa es más fácil de probar a fondo?
2. ¿Dónde deberías probar funciones nuevas?