0Pricing
AI Agents · Aula

Testes de integração para pipelines de agentes

Testes de ponta a ponta contra serviços reais em ambientes de teste isolados.

Testes de integração para pipelines de agentes é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

O que são testes de integração para agentes

Testes unitários verificam componentes individuais de forma isolada. Testes de integração verificam se vários componentes funcionam juntos corretamente em um ambiente real ou próximo do real.

Para agentes, isso significa executar o processo completo — chamadas de LLM, execução de ferramentas e armazenamento de dados — usando serviços reais ou isolados em um ambiente de testes.

Estrutura de teste de ponta a ponta

Um teste de agente de ponta a ponta envia uma consulta real por todo o processo e valida o resultado final. Execute esses testes em um ambiente isolado — nunca no banco de dados de produção nem com dados reais de usuários.

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 dos dados de teste

Os testes de integração não devem poluir dados compartilhados. Use bancos de dados dedicados para testes, espaços de nomes isolados ou dados temporários que sejam limpos depois do teste. Nunca grave dados de teste em tabelas de produção.

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)

Limpeza após cada teste

Cada teste de integração deve limpar todos os dados que criou. Use o padrão de fixture com yield: configure o ambiente antes de yield e faça a limpeza depois. Isso garante que os testes sejam independentes e possam ser executados em qualquer ordem.

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

Serviços isolados: chaves de API de teste

Use chaves de API dedicadas aos testes, com permissões e cotas limitadas, nos testes de integração. Nunca use chaves de produção na CI. Armazene as chaves de teste como variáveis de ambiente da CI, não no 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))

Usando Docker para bancos de dados isolados

Para testes de integração que precisam de um banco de dados real, inicie um contêiner Docker para a sessão de teste. Isso garante um banco de dados limpo e isolado todas as vezes, evitando conflitos com seu banco de dados de desenvolvimento.

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

Configurações de teste específicas do ambiente

Os testes de integração precisam de configurações diferentes para ambientes locais, de CI e de pré-produção. Use variáveis de ambiente e uma função auxiliar de configuração para selecionar automaticamente as opções corretas.

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 do pytest para seleção de testes

Use marcadores personalizados do pytest para categorizar os testes e executar apenas o subconjunto relevante. Configure os marcadores em pytest.ini e use -m na linha de comando para selecioná-los.

# 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

Executando testes de integração na CI

Configure seu processo de CI (GitHub Actions, GitLab CI) para executar testes unitários a cada envio e testes de integração em uma agenda ou antes dos lançamentos. Isso equilibra rapidez e 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')

Medindo a cobertura de testes para agentes

Use pytest-cov para medir quais linhas do código do seu agente são cobertas pelos testes. Busque uma cobertura alta das funções de ferramentas e da lógica de orquestração do agente, mesmo quando as chamadas de LLM forem 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')

Resumo das práticas recomendadas para testes de integração

Regras fundamentais para testes de integração de agentes confiáveis:

  • Use sempre bancos de dados separados para testes — nunca o de produção
  • Limpe os dados de teste depois de cada teste usando fixtures com yield
  • Use chaves de API dedicadas aos testes, com cotas limitadas
  • Use marcadores do pytest para separar testes unitários rápidos de testes de integração lentos
  • Execute testes unitários a cada envio e testes de integração em uma agenda
  • Use Docker para ambientes de banco de dados descartáveis e limpos

Verificação de conhecimento: testes de integração

Teste sua compreensão dos testes de integração para processos de agentes.

Recapitulação: testes de integração para processos de agentes

Agora você tem o conhecimento necessário para criar uma suíte completa e confiável de testes de integração:

  • Use @pytest.mark.integration para separar testes lentos de testes unitários rápidos
  • ​​Isole os dados de teste com bancos de dados dedicados e fixtures de limpeza
  • Use Docker ou serviços isolados para obter ambientes limpos
  • Configure chaves de API específicas para testes por meio de variáveis de ambiente
  • Execute testes unitários a cada confirmação e testes de integração todas as noites na CI
  • Meça a cobertura com pytest-cov para encontrar caminhos não testados

Uma pirâmide de testes bem organizada mantém seu agente confiável à medida que ele evolui.

Perguntas Frequentes

A aula “Testes de integração para pipelines de agentes” é grátis?

Sim — o texto completo de “Testes de integração para pipelines de agentes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “Testes de integração para pipelines de agentes”?

Testes de ponta a ponta contra serviços reais em ambientes de teste isolados. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Agents?

Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Testes de integração para pipelines de agentes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Agents?

Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que testar agentes é diferente
  2. Simulando chamadas de LLM em testes
  3. Testes de agentes baseados em asserções
  4. Testes de integração para pipelines de agentes
← Voltar para AI Agents