0Pricing
AI Agents · Lektion

Integrationstests für Agenten-Pipelines

Ende-zu-Ende-Tests gegen echte Dienste in isolierten Testumgebungen.

Integrationstests für Agenten-Pipelines ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was sind Integrationstests für Agenten?

Unit-Tests überprüfen einzelne Komponenten isoliert. Integrationstests überprüfen, ob mehrere Komponenten in einer realen oder realitätsnahen Umgebung korrekt zusammenarbeiten.

Bei Agenten bedeutet dies, die gesamte Pipeline – LLM-Aufrufe, Tool-Ausführung und Datenspeicherung – mit echten oder in einer Sandbox ausgeführten Diensten zu testen.

Struktur eines End-to-End-Tests

Ein End-to-End-Test für einen Agenten sendet eine echte Anfrage durch die gesamte Pipeline und validiert das Endergebnis. Führen Sie diese Tests in einer Sandbox-Umgebung aus – niemals gegen Ihre Produktionsdatenbank oder Live-Benutzerdaten.

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

Isolierung von Testdaten

Integrationstests dürfen keine gemeinsam genutzten Daten verunreinigen. Verwenden Sie dedizierte Testdatenbanken, isolierte Namensräume oder temporäre Daten, die nach dem Test bereinigt werden. Schreiben Sie Testdaten niemals in Produktionstabellen.

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)

Nach jedem Test aufräumen

Jeder Integrationstest sollte alle von ihm erstellten Daten bereinigen. Verwenden Sie das yield-Fixture-Muster von pytest: Richten Sie die Testumgebung vor yield ein und räumen Sie danach auf. So wird sichergestellt, dass Tests unabhängig sind und in beliebiger Reihenfolge ausgeführt werden können.

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

Sandbox-Dienste: Test-API-Schlüssel

Verwenden Sie für Integrationstests dedizierte Test-API-Schlüssel mit eingeschränkten Berechtigungen und Kontingenten. Verwenden Sie in CI niemals Produktionsschlüssel. Speichern Sie Testschlüssel als CI-Umgebungsvariablen und nicht im Code.

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))

Docker für Datenbanken in der Sandbox verwenden

Wenn Integrationstests eine echte Datenbank benötigen, starten Sie für die Testsitzung einen Docker-Container. Dadurch erhalten Sie jedes Mal eine saubere, isolierte Datenbank und vermeiden Konflikte mit Ihrer Entwicklungsdatenbank.

# 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])

Umgebungsspezifische Testkonfigurationen

Integrationstests benötigen je nach lokaler, CI- oder Staging-Umgebung unterschiedliche Konfigurationen. Verwenden Sie Umgebungsvariablen und eine Konfigurationshilfsfunktion, um automatisch die richtigen Einstellungen auszuwählen.

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']}")

pytest-Markierungen zur Testauswahl

Verwenden Sie benutzerdefinierte pytest-Markierungen, um Tests zu kategorisieren und nur die relevante Teilmenge auszuführen. Konfigurieren Sie die Markierungen in pytest.ini und verwenden Sie -m in der Befehlszeile, um sie auszuwählen.

# 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

Integrationstests in CI ausführen

Konfigurieren Sie Ihre CI-Pipeline (GitHub Actions, GitLab CI) so, dass Unit-Tests bei jedem Push und Integrationstests nach einem Zeitplan oder vor Releases ausgeführt werden. So halten Sie ein ausgewogenes Verhältnis zwischen Geschwindigkeit und Abdeckung.

# .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')

Testabdeckung für Agenten messen

Verwenden Sie pytest-cov, um zu messen, welche Zeilen Ihres Agenten-Codes durch Tests abgedeckt sind. Streben Sie eine hohe Abdeckung der Tool-Funktionen und der Orchestrierungslogik des Agenten an, auch wenn LLM-Aufrufe gemockt werden.

# 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')

Zusammenfassung der Best Practices für Integrationstests

Wichtige Regeln für zuverlässige Integrationstests von Agenten:

  • Verwenden Sie immer separate Testdatenbanken – niemals die Produktionsdatenbank
  • Bereinigen Sie Testdaten nach jedem Test mit yield-Fixtures
  • Verwenden Sie dedizierte Test-API-Schlüssel mit begrenzten Kontingenten
  • Verwenden Sie pytest-Markierungen, um schnelle Unit-Tests von langsamen Integrationstests zu trennen
  • Führen Sie Unit-Tests bei jedem Push und Integrationstests nach einem Zeitplan aus
  • Verwenden Sie Docker für wegwerfbare, saubere Datenbankumgebungen

Wissenscheck: Integrationstests

Testen Sie Ihr Verständnis von Integrationstests für Agenten-Pipelines.

Zusammenfassung: Integrationstests für Agenten-Pipelines

Sie verfügen nun über das Wissen, um eine vollständige und zuverlässige Integrationstestsuite aufzubauen:

  • Verwenden Sie @pytest.mark.integration, um langsame Tests von schnellen Unit-Tests zu trennen
  • Isolieren Sie Testdaten mit dedizierten Datenbanken und Bereinigungs-Fixtures
  • Verwenden Sie Docker oder Sandbox-Dienste für saubere Umgebungen
  • Konfigurieren Sie testspezifische API-Schlüssel über Umgebungsvariablen
  • Führen Sie Unit-Tests bei jedem Commit und Integrationstests nächtlich in CI aus
  • Messen Sie die Abdeckung mit pytest-cov, um nicht getestete Pfade zu finden

Eine gut organisierte Testpyramide sorgt dafür, dass Ihr Agent auch bei seiner Weiterentwicklung zuverlässig bleibt.

Häufig gestellte Fragen

Ist die Lektion „Integrationstests für Agenten-Pipelines“ kostenlos?

Ja — der vollständige Text von „Integrationstests für Agenten-Pipelines“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Integrationstests für Agenten-Pipelines“?

Ende-zu-Ende-Tests gegen echte Dienste in isolierten Testumgebungen. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Integrationstests für Agenten-Pipelines“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum das Testen von Agenten anders ist
  2. LLM-Aufrufe in Tests mocken
  3. Assertion-basiertes Agenten-Testing
  4. Integrationstests für Agenten-Pipelines
← Zurück zu AI Agents