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']) >= 1Isolierung 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 testSandbox-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 tokensIntegrationstests 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
- Warum das Testen von Agenten anders ist
- LLM-Aufrufe in Tests mocken
- Assertion-basiertes Agenten-Testing
- Integrationstests für Agenten-Pipelines