10. Preparación del ambiente de pruebas de integración

10.1 Introducción

Una prueba de integración necesita un ambiente donde los componentes puedan ejecutarse y colaborar de forma controlada. Ese ambiente puede ser local, compartido, automatizado o una combinación de varios recursos.

Preparar bien el ambiente es tan importante como escribir la prueba. Si el entorno es inestable, está mal configurado o contiene datos impredecibles, las pruebas pueden fallar por razones ajenas al comportamiento que queremos verificar.

En este tema veremos qué elementos debe considerar un ambiente de pruebas de integración y cómo prepararlo para obtener resultados confiables.

10.2 Qué es un ambiente de pruebas de integración

Un ambiente de pruebas de integración es el conjunto de recursos necesarios para ejecutar componentes conectados y observar su comportamiento conjunto.

Puede incluir:

  • La aplicación o los módulos que se van a probar.
  • Bases de datos de prueba.
  • Servicios internos.
  • Servicios externos simulados.
  • Colas de mensajes.
  • Archivos de configuración.
  • Datos iniciales.
  • Herramientas para ejecutar y verificar pruebas.
Un buen ambiente de integración debe ser suficientemente realista para detectar errores importantes y suficientemente controlado para que las pruebas sean repetibles.

10.3 Objetivos del ambiente

El ambiente no se prepara solo para que la aplicación “levante”. Debe permitir ejecutar pruebas con confianza.

Sus objetivos principales son:

  • Permitir que los componentes se comuniquen.
  • Usar configuraciones coherentes con el objetivo de la prueba.
  • Proveer datos conocidos.
  • Aislar las pruebas de producción.
  • Evitar efectos secundarios peligrosos.
  • Facilitar la limpieza después de cada ejecución.
  • Entregar evidencia útil cuando algo falla.

10.4 Separación de producción

Las pruebas de integración nunca deberían ejecutarse contra recursos productivos reales, salvo casos muy controlados y excepcionales. Una prueba puede crear datos, modificar registros, enviar mensajes o invocar servicios externos.

Por eso el ambiente debe estar separado de producción:

  • Base de datos propia para pruebas.
  • Credenciales específicas del ambiente.
  • URLs de servicios de prueba o simulados.
  • Colas y archivos separados.
  • Datos ficticios o anonimizados.

Esta separación evita impactos reales y permite ejecutar pruebas sin temor a modificar información importante.

10.5 Configuración del ambiente

La configuración define cómo se conectan los componentes. Un error de configuración puede hacer fallar una prueba aunque el código sea correcto.

Se deben revisar elementos como:

  • Variables de entorno.
  • Cadenas de conexión.
  • URLs de servicios.
  • Puertos utilizados.
  • Credenciales y tokens.
  • Rutas de archivos.
  • Nombres de colas o tópicos.
  • Opciones específicas para modo prueba.

Conviene que esta configuración sea explícita, versionada cuando corresponda y fácil de reproducir.

10.6 Base de datos de prueba

Muchas pruebas de integración necesitan una base de datos. Esa base debe representar el esquema real, pero debe estar aislada de datos productivos.

Al preparar una base de datos de prueba, conviene definir:

  • Cómo se crea el esquema.
  • Cómo se aplican migraciones.
  • Qué datos iniciales se cargan.
  • Cómo se limpia después de cada prueba o suite.
  • Cómo se evita que una prueba dependa de datos dejados por otra.

Una base de datos de prueba mal controlada es una de las causas más comunes de pruebas inestables.

10.7 Datos iniciales

Los datos iniciales son los datos que deben existir antes de ejecutar una prueba. Pueden ser usuarios, productos, permisos, catálogos, estados o cualquier información necesaria para el escenario.

Estos datos deben ser:

  • Conocidos por la prueba.
  • Repetibles en cada ejecución.
  • Suficientes para el escenario.
  • Independientes de ejecuciones anteriores.
  • Fáciles de crear y eliminar.

Si los datos iniciales son ambiguos o compartidos sin control, la prueba puede pasar o fallar según el estado del ambiente.

10.8 Limpieza y aislamiento

Una prueba de integración puede modificar bases de datos, archivos, colas o estados internos. Si esos cambios quedan después de la ejecución, pueden afectar otras pruebas.

La limpieza puede hacerse de varias maneras:

  • Recrear la base de datos antes de la suite.
  • Usar transacciones y revertirlas al terminar.
  • Eliminar registros creados por cada prueba.
  • Vaciar colas usadas durante la ejecución.
  • Borrar archivos temporales.
  • Usar identificadores únicos por prueba.

El objetivo es que una prueba no dependa del orden ni del resultado de otra.

10.9 Dependencias externas

Cuando una prueba necesita una dependencia externa, debemos decidir si se usará una versión real, una versión de prueba o una simulación.

Ejemplos:

  • Pasarela de pagos en modo sandbox.
  • Servidor de correo falso que captura mensajes.
  • Servicio HTTP simulado.
  • Cola local para pruebas.
  • Almacenamiento temporal en lugar de almacenamiento productivo.

La decisión debe estar alineada con el objetivo de la prueba. Si el objetivo no es validar el proveedor externo real, una simulación controlada puede ser más útil.

10.10 Ambientes locales y compartidos

Las pruebas de integración pueden ejecutarse en la computadora de un desarrollador, en un ambiente compartido o en un proceso automatizado.

Ambiente Ventaja Cuidado
Local Permite ejecutar y depurar rápido. Debe ser fácil de reproducir en otras computadoras.
Compartido Se parece más a un entorno común del equipo. Puede sufrir interferencia entre usuarios o pruebas.
Automatizado Ejecuta pruebas de forma repetible en cada cambio. Necesita preparación y limpieza confiables.

10.11 Reproducibilidad

Un ambiente reproducible puede crearse nuevamente con pasos claros. Esto es importante para que las pruebas no dependan de configuraciones manuales difíciles de recordar.

Buenas prácticas para reproducibilidad:

  • Documentar comandos de instalación y ejecución.
  • Versionar archivos de configuración de prueba cuando sea seguro hacerlo.
  • Automatizar creación de esquemas y datos iniciales.
  • Usar nombres claros para recursos de prueba.
  • Evitar pasos manuales innecesarios.

Si preparar el ambiente depende de conocimiento informal, las pruebas serán difíciles de ejecutar para nuevos integrantes del equipo.

10.12 Observabilidad del ambiente

Cuando una prueba de integración falla, el ambiente debe ofrecer información suficiente para investigar. Esto incluye logs, mensajes de error, registros, estados finales y trazas de operaciones importantes.

Conviene disponer de:

  • Logs claros de la aplicación.
  • Errores visibles de dependencias.
  • Acceso a datos generados por la prueba.
  • Identificadores únicos para seguir una operación.
  • Mensajes de cola o archivos temporales revisables.

Sin observabilidad, una prueba fallida puede indicar que algo está mal, pero no ayudar a encontrar la causa.

10.13 Estabilidad del ambiente

Un ambiente inestable produce pruebas poco confiables. Si las pruebas fallan algunas veces sin cambios en el código, el equipo puede perder confianza en la suite.

Señales de inestabilidad:

  • Servicios que se caen con frecuencia.
  • Datos modificados por varias personas o procesos.
  • Colas con mensajes viejos.
  • Configuraciones que cambian sin control.
  • Dependencias externas lentas o impredecibles.
  • Pruebas que dependen del horario o del orden de ejecución.

La estabilidad del ambiente es parte de la calidad de las pruebas, no un detalle secundario.

10.14 Ejemplo de ambiente para una funcionalidad

Supongamos que queremos probar la integración de una funcionalidad para crear pedidos. Un ambiente razonable podría incluir:

Elemento Preparación
Aplicación Ejecutada en modo prueba con configuración específica.
Base de datos Esquema actualizado y datos iniciales de productos.
Servicio de pagos Simulado para responder pago aprobado o rechazado.
Cola de eventos Cola de prueba vacía antes de comenzar.
Datos de prueba Usuario, producto disponible y pedido esperado.
Limpieza Eliminar pedido creado y vaciar mensajes generados.

10.15 Errores comunes al preparar ambientes

Al preparar ambientes de integración, suelen aparecer errores como:

  • Usar datos compartidos sin control.
  • No limpiar después de cada prueba.
  • Apuntar por error a servicios productivos.
  • Depender de pasos manuales no documentados.
  • No aplicar migraciones de base de datos.
  • Simular dependencias de forma demasiado diferente al comportamiento real.
  • No registrar información suficiente para diagnosticar fallas.

Estos errores pueden hacer que las pruebas fallen por el ambiente y no por el código que realmente queremos evaluar.

10.16 Lista de verificación inicial

Antes de ejecutar una suite de integración, puede ser útil revisar:

  • ¿La configuración apunta al ambiente correcto?
  • ¿La base de datos de prueba está disponible y actualizada?
  • ¿Los datos iniciales son conocidos y repetibles?
  • ¿Las dependencias externas están simuladas o preparadas?
  • ¿Existe una estrategia de limpieza?
  • ¿Los logs permiten diagnosticar errores?
  • ¿La prueba puede ejecutarse más de una vez con el mismo resultado esperado?

10.17 Qué debes recordar de este tema

  • El ambiente de integración debe ser realista, controlado y separado de producción.
  • La configuración, los datos iniciales y la limpieza son fundamentales.
  • Una base de datos de prueba debe tener esquema correcto y datos conocidos.
  • Las dependencias externas pueden ser reales, de prueba o simuladas según el objetivo.
  • Un ambiente reproducible reduce errores manuales y facilita el trabajo del equipo.
  • La observabilidad ayuda a diagnosticar fallas de integración.

10.18 Conclusión

Preparar el ambiente es una parte esencial de las pruebas de integración. Una prueba bien escrita puede perder valor si se ejecuta sobre datos desordenados, configuraciones incorrectas o dependencias inestables.

Un buen ambiente permite repetir pruebas, diagnosticar fallas y verificar colaboraciones entre componentes con mayor confianza.

En el próximo tema profundizaremos en configuración, variables de entorno y dependencias externas, porque suelen ser una fuente frecuente de errores de integración.