0Pricing
AI Agents · Lezione

Test di integrazione per le pipeline degli agenti

Test end-to-end su servizi reali in ambienti di test isolati

Test di integrazione per le pipeline degli agenti è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.

Che cosa sono i test di integrazione per gli agenti

I test unitari verificano i singoli componenti in isolamento. I test di integrazione verificano che più componenti funzionino correttamente insieme in un ambiente reale o il più possibile simile a quello reale.

Per gli agenti, ciò significa eseguire l'intera pipeline — chiamate LLM, esecuzione dei tool, archiviazione dei dati — utilizzando servizi reali o in sandbox.

Struttura di un test end-to-end

Un test end-to-end per un agente invia una richiesta reale attraverso l'intera pipeline e convalida il risultato finale. Esegua questi test in un ambiente sandbox: non li esegua mai sul database di produzione o sui dati reali degli utenti.

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

Isolamento dei dati di test

I test di integrazione non devono contaminare i dati condivisi. Utilizzi database di test dedicati, namespace isolati o dati temporanei che vengano eliminati al termine del test. Non scriva mai dati di test nelle tabelle di produzione.

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)

Pulizia dopo ogni test

Ogni test di integrazione dovrebbe eliminare tutti i dati che ha creato. Utilizzi il pattern delle fixture con yield di pytest: esegua la configurazione prima di yield e la pulizia dopo. In questo modo i test restano indipendenti e possono essere eseguiti in qualsiasi ordine.

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

Servizi in sandbox: chiavi API di test

Per i test di integrazione utilizzi chiavi API di test dedicate, con autorizzazioni e quote limitate. Non utilizzi mai chiavi di produzione nella CI. Memorizzi le chiavi di test come variabili d'ambiente della CI, non nel codice.

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

Utilizzare Docker per database in sandbox

Per i test di integrazione che richiedono un database reale, avvii un container Docker per la sessione di test. In questo modo avrà la certezza di utilizzare ogni volta un database pulito e isolato, evitando conflitti con il database di sviluppo.

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

Configurazioni dei test specifiche per l'ambiente

I test di integrazione richiedono configurazioni diverse per gli ambienti locali, CI e staging. Utilizzi variabili d'ambiente e un helper di configurazione per selezionare automaticamente le impostazioni corrette.

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

Marker di pytest per selezionare i test

Utilizzi marker personalizzati di pytest per categorizzare i test ed eseguire solo il sottoinsieme pertinente. Configuri i marker in pytest.ini e utilizzi -m dalla riga di comando per selezionarli.

# 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

Eseguire i test di integrazione nella CI

Configuri la pipeline CI (GitHub Actions, GitLab CI) per eseguire i test unitari a ogni push e i test di integrazione secondo una pianificazione o prima dei rilasci. In questo modo bilancia velocità e copertura.

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

Misurare la copertura dei test per gli agenti

Utilizzi pytest-cov per misurare quali righe del codice dell'agente sono coperte dai test. Punti a una copertura elevata delle funzioni dei tool e della logica di orchestrazione dell'agente, anche quando le chiamate LLM sono simulate.

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

Riepilogo delle buone pratiche per i test di integrazione

Regole fondamentali per test di integrazione affidabili degli agenti:

  • Utilizzi sempre database di test separati, mai quello di produzione
  • Elimini i dati di test dopo ogni test con fixture che utilizzano yield
  • Utilizzi chiavi API di test dedicate con quote limitate
  • Utilizzi i marker di pytest per separare i test unitari rapidi dai test di integrazione lenti
  • Esegua i test unitari a ogni push e i test di integrazione secondo una pianificazione
  • Utilizzi Docker per ambienti database temporanei e puliti

Verifica delle conoscenze: test di integrazione

Verifichi la propria comprensione dei test di integrazione per le pipeline degli agenti.

Riepilogo: test di integrazione per le pipeline degli agenti

Ora dispone delle conoscenze necessarie per creare una suite completa e affidabile di test di integrazione:

  • Utilizzi @pytest.mark.integration per separare i test lenti dai test unitari rapidi
  • Isoli i dati di test con database dedicati e fixture di pulizia
  • Utilizzi Docker o servizi in sandbox per creare ambienti puliti
  • Configuri chiavi API specifiche per i test tramite variabili d'ambiente
  • Esegua i test unitari a ogni commit e quelli di integrazione ogni notte nella CI
  • Misuri la copertura con pytest-cov per individuare i percorsi non testati

Una piramide dei test ben organizzata mantiene affidabile l'agente durante la sua evoluzione.

Domande Frequenti

La lezione «Test di integrazione per le pipeline degli agenti» è gratuita?

Sì — il testo completo di «Test di integrazione per le pipeline degli agenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.

Cosa imparerò in «Test di integrazione per le pipeline degli agenti»?

Test end-to-end su servizi reali in ambienti di test isolati Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Agents?

Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Test di integrazione per le pipeline degli agenti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Agents?

Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché testare gli agenti è diverso
  2. Mock delle chiamate LLM nei test
  3. Test degli agenti basati su asserzioni
  4. Test di integrazione per le pipeline degli agenti
← Torna a AI Agents