0Pricing
AI Agents · Lección

Pruebas de integración para pipelines de agentes

Pruebas de extremo a extremo contra servicios reales en entornos de prueba aislados.

Pruebas de integración para pipelines de agentes es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

¿Qué son las pruebas de integración de agentes?

Las pruebas unitarias comprueban componentes individuales de forma aislada. Las pruebas de integración comprueban que varios componentes funcionan correctamente en conjunto en un entorno real o similar a uno real.

En el caso de los agentes, esto significa ejecutar todo el flujo —llamadas al LLM, ejecución de herramientas y almacenamiento de datos— contra servicios reales o aislados.

Estructura de una prueba de extremo a extremo

Una prueba de agente de extremo a extremo envía una consulta real a través de todo el flujo y valida el resultado final. Ejecute estas pruebas en un entorno aislado; nunca contra su base de datos de producción ni contra datos reales de usuarios.

import pytest

# Mark as integration test — skipped in fast unit test runs
@pytest.mark.integration
def test_research_agent_full_pipeline():
    from myagent import ResearchAgent

    agent = ResearchAgent(
        openai_api_key='YOUR_TEST_KEY',
        search_api_key='YOUR_TEST_KEY'
    )

    result = agent.run('What is the population of Tokyo?')

    # Structural assertions — not exact string matching
    assert isinstance(result, dict)
    assert result['status'] == 'completed'
    assert 'tokyo' in result['answer'].lower() or 'japan' in result['answer'].lower()
    assert len(result['sources']) >= 1

Aislamiento de los datos de prueba

Las pruebas de integración no deben contaminar los datos compartidos. Use bases de datos de prueba específicas, espacios de nombres aislados o datos temporales que se eliminen después de la prueba. Nunca escriba datos de prueba en tablas de producción.

import os
import pytest

# Use a separate test database URL
@pytest.fixture(scope='session')
def test_db():
    test_db_url = os.environ.get(
        'TEST_DATABASE_URL',
        'postgresql://localhost/myagent_test'  # separate test DB
    )
    # Set up test schema
    from myagent.database import create_tables
    create_tables(test_db_url)
    yield test_db_url
    # Tear down after all tests in the session
    from myagent.database import drop_tables
    drop_tables(test_db_url)

Limpieza después de cada prueba

Cada prueba de integración debe limpiar los datos que haya creado. Use el patrón de fixture yield de pytest: configure el entorno antes de yield y límpielo después. Esto garantiza que las pruebas sean independientes y puedan ejecutarse en cualquier orden.

import pytest

@pytest.fixture
def clean_agent_memory(test_db):
    # No setup needed — DB starts empty
    yield
    # Cleanup: delete any records created during this test
    from myagent.database import clear_conversation_history
    clear_conversation_history(test_db)

@pytest.mark.integration
def test_agent_stores_conversation(clean_agent_memory, test_db):
    from myagent import Agent
    agent = Agent(db_url=test_db)

    agent.run('Remember that my name is Alex')
    history = agent.get_history()

    assert len(history) > 0
    assert any('Alex' in str(msg) for msg in history)
    # clean_agent_memory fixture deletes these after the test

Servicios aislados: claves de API de prueba

Use claves de API de prueba específicas, con permisos y cuotas limitados, para las pruebas de integración. Nunca use claves de producción en CI. Almacene las claves de prueba como variables de entorno de CI, no en el código.

import os
import pytest

# Skip integration tests if test keys are not configured
def requires_integration_keys():
    return pytest.mark.skipif(
        not os.environ.get('OPENAI_TEST_KEY'),
        reason='Integration test keys not configured'
    )

@requires_integration_keys()
@pytest.mark.integration
def test_live_weather_tool():
    from myagent.tools import get_weather
    result = get_weather(city='London', unit='celsius')

    assert result['success'] is True
    assert 'temperature' in result
    assert isinstance(result['temperature'], (int, float))

Uso de Docker para bases de datos aisladas

Para las pruebas de integración que necesiten una base de datos real, inicie un contenedor de Docker para la sesión de pruebas. Esto garantiza una base de datos limpia y aislada en cada ejecución y evita conflictos con su base de datos de desarrollo.

# conftest.py — docker-based test database
import subprocess
import pytest

@pytest.fixture(scope='session')
def docker_postgres():
    container_id = subprocess.check_output([
        'docker', 'run', '-d',
        '-e', 'POSTGRES_PASSWORD=test',
        '-e', 'POSTGRES_DB=agent_test',
        '-p', '5434:5432',  # use non-standard port to avoid conflicts
        'postgres:15'
    ]).decode().strip()

    import time
    time.sleep(2)  # wait for Postgres to start

    yield 'postgresql://postgres:test@localhost:5434/agent_test'

    subprocess.run(['docker', 'stop', container_id])
    subprocess.run(['docker', 'rm', container_id])

Configuraciones de prueba específicas del entorno

Las pruebas de integración necesitan configuraciones diferentes para los entornos local, de CI y de staging. Use variables de entorno y una función auxiliar de configuración para seleccionar automáticamente los ajustes adecuados.

import os

def get_test_config() -> dict:
    env = os.environ.get('TEST_ENV', 'local')

    configs = {
        'local': {
            'db_url': 'postgresql://localhost/agent_test',
            'openai_key': os.environ.get('OPENAI_TEST_KEY', ''),
            'use_real_llm': False  # use mocks locally
        },
        'ci': {
            'db_url': os.environ.get('CI_DATABASE_URL', ''),
            'openai_key': os.environ.get('CI_OPENAI_KEY', ''),
            'use_real_llm': True  # use real LLM in CI integration tests
        },
        'staging': {
            'db_url': os.environ.get('STAGING_DATABASE_URL', ''),
            'openai_key': os.environ.get('STAGING_OPENAI_KEY', ''),
            'use_real_llm': True
        }
    }
    return configs[env]

config = get_test_config()

print(f"TEST_ENV not set -> using '{os.environ.get('TEST_ENV', 'local')}' config")
print(f"DB URL       : {config['db_url']}")
print(f"Use real LLM : {config['use_real_llm']}")

Marcadores de pytest para seleccionar pruebas

Use marcadores personalizados de pytest para categorizar las pruebas y ejecutar solo el subconjunto relevante. Configure los marcadores en pytest.ini y use -m en la línea de comandos para seleccionarlos.

# pytest.ini
# [pytest]
# markers =
#     unit: Fast unit tests with mocked dependencies
#     integration: Slower tests with real or sandboxed services
#     expensive: Tests that make real LLM calls and cost money

# Run only unit tests (fast CI check):
# pytest -m unit

# Run only integration tests:
# pytest -m integration

# Run everything except expensive tests:
# pytest -m 'not expensive'

# In test files:
import pytest

@pytest.mark.unit
def test_tool_format():
    pass  # fast, no external calls

@pytest.mark.integration
@pytest.mark.expensive
def test_with_real_llm():
    pass  # slow, costs tokens

Ejecución de pruebas de integración en CI

Configure su flujo de CI (GitHub Actions, GitLab CI) para ejecutar las pruebas unitarias con cada push y las pruebas de integración según un calendario o antes de las publicaciones. Así se equilibran la velocidad y la cobertura.

# .github/workflows/test.yml (abbreviated)
# name: Tests
# on:
#   push:
#     branches: [main, develop]
#   schedule:
#     - cron: '0 2 * * *'  # nightly integration tests
#
# jobs:
#   unit-tests:
#     runs-on: ubuntu-latest
#     steps:
#       - uses: actions/checkout@v3
#       - run: pip install -r requirements.txt
#       - run: pytest -m unit --tb=short
#
#   integration-tests:
#     if: github.event_name == 'schedule'
#     env:
#       CI_OPENAI_KEY: ${{ secrets.CI_OPENAI_KEY }}
#       CI_DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
#     steps:
#       - run: pytest -m integration --tb=long

print('Unit tests on every push, integration tests nightly')

Medición de la cobertura de pruebas de agentes

Use pytest-cov para medir qué líneas del código de su agente están cubiertas por las pruebas. Busque una cobertura alta en las funciones de las herramientas y en la lógica de orquestación del agente, aunque las llamadas al LLM estén simuladas.

# Install: pip install pytest-cov

# Run tests with coverage report:
# pytest --cov=myagent --cov-report=html -m unit

# This generates an HTML report showing which lines are untested
# Uncovered lines in the agent loop are high-risk areas

# Example coverage config in pyproject.toml:
# [tool.coverage.run]
# omit = ["tests/*", "scripts/*"]
#
# [tool.coverage.report]
# fail_under = 80  # fail if coverage drops below 80%

print('Coverage reports highlight untested code paths in your agent')

Resumen de buenas prácticas para las pruebas de integración

Reglas clave para realizar pruebas de integración de agentes fiables:

  • Use siempre bases de datos de prueba independientes, nunca la de producción
  • Limpie los datos de prueba después de cada prueba mediante fixtures con yield
  • Use claves de API de prueba específicas con cuotas limitadas
  • Use marcadores de pytest para separar las pruebas unitarias rápidas de las pruebas de integración lentas
  • Ejecute las pruebas unitarias con cada push y las de integración según un calendario
  • Use Docker para disponer de entornos de base de datos limpios y desechables

Comprobación de conocimientos: pruebas de integración

Compruebe sus conocimientos sobre las pruebas de integración de los flujos de agentes.

Recapitulación: pruebas de integración de flujos de agentes

Ahora dispone de los conocimientos necesarios para crear una suite de pruebas de integración completa y fiable:

  • Use @pytest.mark.integration para separar las pruebas lentas de las pruebas unitarias rápidas
  • Aísle los datos de prueba mediante bases de datos específicas y fixtures de limpieza
  • Use Docker o servicios aislados para disponer de entornos limpios
  • Configure claves de API específicas para las pruebas mediante variables de entorno
  • Ejecute las pruebas unitarias con cada commit y las de integración cada noche en CI
  • Mida la cobertura con pytest-cov para encontrar rutas sin probar

Una pirámide de pruebas bien organizada mantiene la fiabilidad de su agente a medida que evoluciona.

Preguntas frecuentes

¿La lección «Pruebas de integración para pipelines de agentes» es gratis?

Sí — el texto completo de «Pruebas de integración para pipelines de agentes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Pruebas de integración para pipelines de agentes»?

Pruebas de extremo a extremo contra servicios reales en entornos de prueba aislados. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Agents?

No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Pruebas de integración para pipelines de agentes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Agents?

Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué probar agentes es diferente
  2. Simulación de llamadas a LLM en pruebas
  3. Pruebas de agentes basadas en aserciones
  4. Pruebas de integración para pipelines de agentes
← Volver a AI Agents