6.9 KiB
03 - Testes Automatizados Abrangentes
🎯 Objetivo
Gerar o arquivo test_system.py que implementa testes automatizados para validar todas as 4 operações matemáticas, tratamento de erros e interpretação de linguagem natural.
📋 Contexto
Os testes devem cobrir casos de sucesso (happy path), casos de erro (divisão por zero), operações não implementadas e interpretação de linguagem natural contextual.
🔧 Especificações Técnicas
- Framework: Reutiliza MCPChatClient
- Casos de teste: 8 cenários diferentes
- Execução: Sequencial com pausas entre testes
- Saída: Relatório formatado com resumo final
💬 PROMPT COMPLETO
Você é um desenvolvedor Python especialista em testes automatizados para sistemas com AI Agents.
TAREFA:
Crie um arquivo Python chamado "test_system.py" que implemente testes automatizados abrangentes para o sistema MCP de calculadora inteligente.
REQUISITOS FUNCIONAIS:
1. IMPORTAR E REUTILIZAR:
- Importar a classe MCPChatClient de mcp_client.py
- Usar asyncio para execução assíncrona
- Não duplicar código, apenas testar
2. CASOS DE TESTE (8 cenários):
TESTE 1 - Soma:
- Descrição: "Teste de Soma"
- Mensagem: "Quanto é 15 mais 7?"
- Resultado esperado: 22
TESTE 2 - Subtração:
- Descrição: "Teste de Subtração"
- Mensagem: "Subtraia 5 de 20"
- Resultado esperado: 15
TESTE 3 - Multiplicação:
- Descrição: "Teste de Multiplicação"
- Mensagem: "Multiplique 8 por 6"
- Resultado esperado: 48
TESTE 4 - Divisão:
- Descrição: "Teste de Divisão"
- Mensagem: "Divida 100 por 4"
- Resultado esperado: 25
TESTE 5 - Divisão por Zero (Erro Esperado):
- Descrição: "Teste de Divisão por Zero (Erro Esperado)"
- Mensagem: "Divida 10 por 0"
- Resultado esperado: Erro tratado educadamente
TESTE 6 - Operação Não Implementada:
- Descrição: "Teste de Operação Não Implementada"
- Mensagem: "Calcule 5 elevado ao quadrado"
- Resultado esperado: Informação sobre limitação
TESTE 7 - Linguagem Natural (Soma):
- Descrição: "Teste de Linguagem Natural - Soma"
- Mensagem: "Eu tenho 25 maçãs e ganhei mais 13, quantas tenho agora?"
- Resultado esperado: 38
TESTE 8 - Linguagem Natural (Subtração):
- Descrição: "Teste de Linguagem Natural - Subtração"
- Mensagem: "Se eu tinha 50 reais e gastei 18, quanto sobrou?"
- Resultado esperado: 32
3. ESTRUTURA DE DADOS:
Usar lista de dicionários:
```python
test_cases = [
{
"descricao": "Teste de Soma",
"mensagem": "Quanto é 15 mais 7?"
},
# ... outros casos
]
-
FUNÇÃO test_system():
- Criar instância de MCPChatClient
- Conectar ao servidor
- Iterar sobre test_cases
- Para cada teste:
- Imprimir cabeçalho com número e descrição
- Imprimir mensagem do usuário
- Chamar client.chat(mensagem)
- Imprimir resposta do assistente
- Adicionar pausa de 1 segundo entre testes
- Imprimir resumo final
-
FORMATAÇÃO DE SAÍDA:
============================================================ TESTE AUTOMATIZADO - Sistema MCP ============================================================ ✓ Conectado ao servidor MCP ✓ Ferramentas disponíveis: ['soma', 'subtracao', 'multiplicacao', 'divisao'] 📝 Executando sequência de testes... ============================================================ [Teste 1/8] Teste de Soma ------------------------------------------------------------ 👤 Usuário: Quanto é 15 mais 7? 🤖 Assistente: [resposta do LLM] ============================================================ [Teste 2/8] Teste de Subtração ... ✅ Todos os testes concluídos! Resumo dos testes: ✓ Soma ✓ Subtração ✓ Multiplicação ✓ Divisão ✓ Tratamento de erro (divisão por zero) ✓ Operação não implementada ✓ Interpretação de linguagem natural -
TRATAMENTO DE ERROS:
- Try-catch na função test_system()
- Imprimir traceback completo em caso de erro
- Sempre fechar conexão no bloco finally
REQUISITOS TÉCNICOS:
- Imports: asyncio, json, MCPChatClient
- Função async test_system()
- Usar await asyncio.sleep(1) entre testes
- Shebang: #!/usr/bin/env python3
- Docstrings em português
- Bloco if name == "main"
ESTRUTURA DO CÓDIGO:
- Shebang e docstring
- Imports
- Função async test_system()
- Bloco if name == "main"
EXEMPLO DE LOOP DE TESTES:
for i, test_case in enumerate(test_cases, 1):
print(f"\n[Teste {i}/{len(test_cases)}] {test_case['descricao']}")
print("-" * 60)
print(f"👤 Usuário: {test_case['mensagem']}")
response = await client.chat(test_case['mensagem'])
print(f"🤖 Assistente: {response}")
print("=" * 60)
await asyncio.sleep(1)
Por favor, gere o código completo do arquivo test_system.py seguindo todas estas especificações.
---
## ✅ Resultado Esperado
Você deve receber um arquivo Python completo (~100 linhas) com:
**Estrutura:**
```python
#!/usr/bin/env python3
"""
Script de teste automatizado para o sistema MCP...
"""
import asyncio
import json
from mcp_client import MCPChatClient
async def test_system():
# Implementação dos testes...
if __name__ == "__main__":
asyncio.run(test_system())
Características:
- ✅ 8 casos de teste definidos
- ✅ Formatação visual clara
- ✅ Numeração de testes (1/8, 2/8, etc.)
- ✅ Pausas entre testes
- ✅ Resumo final
- ✅ Tratamento de erros
- ✅ Bloco finally para cleanup
🧪 Como Validar
Salve o código gerado em mcp_project/test_system.py e verifique:
# 1. Verificar sintaxe Python
python -m py_compile test_system.py
# 2. Contar linhas
wc -l test_system.py
# 3. Verificar estrutura
grep -E "test_cases|async def test_system" test_system.py
Saída esperada:
97 test_system.py
Verificação manual:
- Arquivo tem shebang
#!/usr/bin/env python3 - Import de MCPChatClient presente
- Lista test_cases com 8 casos
- Função async test_system()
- Loop iterando sobre test_cases
- Formatação com emojis e separadores
- Resumo final com checkmarks
- Bloco try-except-finally
📝 Notas
- Os testes não executam ainda (dependências não instaladas)
- Cada teste espera 1 segundo para não sobrecarregar a API
- O resumo final é apenas visual, não valida resultados
- Em produção, considere usar pytest para assertions
🔧 Troubleshooting
Erro: "Cannot import MCPChatClient"
- Verifique se mcp_client.py está no mesmo diretório
- Confirme que não há erros de sintaxe em mcp_client.py
Testes muito lentos:
- Ajuste o asyncio.sleep(1) para valores menores
- Considere executar testes em paralelo (avançado)
➡️ Próximo Passo
Após validar os testes, prossiga para: 04-REQUIREMENTS.md