|
|
|
|
|
""" |
|
|
Script de teste do sistema de testes massivos |
|
|
""" |
|
|
import sys |
|
|
import os |
|
|
import asyncio |
|
|
import logging |
|
|
|
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
|
|
|
def test_imports(): |
|
|
"""Testa se todos os imports funcionam""" |
|
|
print("🔍 Testando imports...") |
|
|
|
|
|
try: |
|
|
from testes.test_runner import MassiveTestRunner |
|
|
print(" ✅ MassiveTestRunner") |
|
|
|
|
|
from testes.test_validator import TestValidator |
|
|
print(" ✅ TestValidator") |
|
|
|
|
|
from testes.report_generator import ReportGenerator |
|
|
print(" ✅ ReportGenerator") |
|
|
|
|
|
from utils.config import AVAILABLE_MODELS |
|
|
print(" ✅ AVAILABLE_MODELS") |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro no import: {e}") |
|
|
return False |
|
|
|
|
|
def test_validator(): |
|
|
"""Testa o sistema de validação""" |
|
|
print("\n🔍 Testando validador...") |
|
|
|
|
|
try: |
|
|
from testes.test_validator import TestValidator |
|
|
|
|
|
validator = TestValidator() |
|
|
print(" ✅ Validator inicializado") |
|
|
|
|
|
|
|
|
result = validator._validate_with_keyword( |
|
|
"A resposta contém 150 usuários no total", |
|
|
"150 usuários" |
|
|
) |
|
|
|
|
|
if result['valid'] and result['score'] == 100: |
|
|
print(" ✅ Validação por keyword funcionando") |
|
|
else: |
|
|
print(f" ❌ Validação por keyword falhou: {result}") |
|
|
return False |
|
|
|
|
|
|
|
|
sql_result = validator.validate_sql_syntax("SELECT * FROM usuarios WHERE idade > 18") |
|
|
|
|
|
if sql_result['valid']: |
|
|
print(" ✅ Validação de sintaxe SQL funcionando") |
|
|
else: |
|
|
print(f" ❌ Validação SQL falhou: {sql_result}") |
|
|
return False |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro no validator: {e}") |
|
|
return False |
|
|
|
|
|
def test_report_generator(): |
|
|
"""Testa o gerador de relatórios""" |
|
|
print("\n🔍 Testando gerador de relatórios...") |
|
|
|
|
|
try: |
|
|
from testes.report_generator import ReportGenerator |
|
|
|
|
|
generator = ReportGenerator() |
|
|
print(" ✅ ReportGenerator inicializado") |
|
|
|
|
|
|
|
|
test_results = { |
|
|
'session_info': { |
|
|
'id': 'test_session', |
|
|
'question': 'Teste de pergunta', |
|
|
'validation_method': 'keyword' |
|
|
}, |
|
|
'group_results': [ |
|
|
{ |
|
|
'group_id': 1, |
|
|
'group_config': { |
|
|
'sql_model_name': 'GPT-4o-mini', |
|
|
'processing_enabled': False, |
|
|
'processing_model_name': None |
|
|
}, |
|
|
'total_tests': 5, |
|
|
'successful_tests': 4, |
|
|
'valid_responses': 3, |
|
|
'success_rate': 80.0, |
|
|
'validation_rate': 60.0, |
|
|
'response_consistency': 75.0, |
|
|
'sql_consistency': 80.0, |
|
|
'avg_execution_time': 5.2 |
|
|
} |
|
|
], |
|
|
'individual_results': [ |
|
|
{ |
|
|
'group_id': 1, |
|
|
'iteration': 1, |
|
|
'sql_model': 'GPT-4o-mini', |
|
|
'processing_enabled': False, |
|
|
'success': True, |
|
|
'validation': {'valid': True, 'score': 85} |
|
|
} |
|
|
], |
|
|
'summary': { |
|
|
'total_groups': 1, |
|
|
'total_tests': 5, |
|
|
'overall_success_rate': 80.0, |
|
|
'overall_validation_rate': 60.0, |
|
|
'best_performing_group': { |
|
|
'group_id': 1, |
|
|
'group_config': {'sql_model_name': 'GPT-4o-mini'}, |
|
|
'validation_rate': 60.0 |
|
|
}, |
|
|
'most_consistent_group': { |
|
|
'group_id': 1, |
|
|
'group_config': {'sql_model_name': 'GPT-4o-mini'}, |
|
|
'response_consistency': 75.0 |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
group_df = generator._create_group_summary_dataframe(test_results) |
|
|
individual_df = generator._create_individual_results_dataframe(test_results) |
|
|
general_df = generator._create_general_summary_dataframe(test_results) |
|
|
|
|
|
if len(group_df) > 0 and len(individual_df) > 0 and len(general_df) > 0: |
|
|
print(" ✅ DataFrames criados com sucesso") |
|
|
else: |
|
|
print(" ❌ Erro na criação de DataFrames") |
|
|
return False |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro no report generator: {e}") |
|
|
return False |
|
|
|
|
|
async def test_runner_basic(): |
|
|
"""Testa funcionalidades básicas do runner""" |
|
|
print("\n🔍 Testando runner básico...") |
|
|
|
|
|
try: |
|
|
from testes.test_runner import MassiveTestRunner |
|
|
|
|
|
runner = MassiveTestRunner(max_workers=2) |
|
|
print(" ✅ MassiveTestRunner inicializado") |
|
|
|
|
|
|
|
|
items = ["resposta A", "resposta A", "resposta B", "resposta A"] |
|
|
consistency = runner._calculate_consistency(items) |
|
|
|
|
|
expected = 3/4 |
|
|
if abs(consistency - expected) < 0.01: |
|
|
print(" ✅ Cálculo de consistência funcionando") |
|
|
else: |
|
|
print(f" ❌ Consistência incorreta: esperado {expected}, obtido {consistency}") |
|
|
return False |
|
|
|
|
|
|
|
|
status = runner.get_status() |
|
|
if 'current_status' in status and status['current_status'] == 'idle': |
|
|
print(" ✅ Status funcionando") |
|
|
else: |
|
|
print(f" ❌ Status incorreto: {status}") |
|
|
return False |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro no runner: {e}") |
|
|
return False |
|
|
|
|
|
def test_flask_app(): |
|
|
"""Testa se o app Flask pode ser importado""" |
|
|
print("\n🔍 Testando Flask app...") |
|
|
|
|
|
try: |
|
|
from testes.app_teste import app |
|
|
print(" ✅ Flask app importado") |
|
|
|
|
|
|
|
|
routes = [rule.rule for rule in app.url_map.iter_rules()] |
|
|
expected_routes = ['/', '/api/models', '/api/create_test_session'] |
|
|
|
|
|
for route in expected_routes: |
|
|
if route in routes: |
|
|
print(f" ✅ Rota {route} definida") |
|
|
else: |
|
|
print(f" ❌ Rota {route} não encontrada") |
|
|
return False |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro no Flask app: {e}") |
|
|
return False |
|
|
|
|
|
def test_agentgraph_integration(): |
|
|
"""Testa integração com AgentGraph""" |
|
|
print("\n🔍 Testando integração com AgentGraph...") |
|
|
|
|
|
try: |
|
|
from utils.config import AVAILABLE_MODELS, validate_config |
|
|
|
|
|
|
|
|
if len(AVAILABLE_MODELS) > 0: |
|
|
print(f" ✅ {len(AVAILABLE_MODELS)} modelos disponíveis") |
|
|
else: |
|
|
print(" ❌ Nenhum modelo disponível") |
|
|
return False |
|
|
|
|
|
|
|
|
try: |
|
|
validate_config() |
|
|
print(" ✅ Configuração válida") |
|
|
except Exception as e: |
|
|
print(f" ⚠️ Configuração incompleta: {e}") |
|
|
print(" 💡 Configure as APIs no .env para funcionalidade completa") |
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f" ❌ Erro na integração: {e}") |
|
|
return False |
|
|
|
|
|
async def main(): |
|
|
"""Função principal de teste""" |
|
|
print("🧪 TESTE DO SISTEMA DE TESTES MASSIVOS") |
|
|
print("=" * 50) |
|
|
|
|
|
tests = [ |
|
|
("Imports", test_imports), |
|
|
("Validator", test_validator), |
|
|
("Report Generator", test_report_generator), |
|
|
("Runner Básico", test_runner_basic), |
|
|
("Flask App", test_flask_app), |
|
|
("Integração AgentGraph", test_agentgraph_integration) |
|
|
] |
|
|
|
|
|
passed = 0 |
|
|
total = len(tests) |
|
|
|
|
|
for test_name, test_func in tests: |
|
|
print(f"\n📋 {test_name}") |
|
|
print("-" * 30) |
|
|
|
|
|
try: |
|
|
if asyncio.iscoroutinefunction(test_func): |
|
|
result = await test_func() |
|
|
else: |
|
|
result = test_func() |
|
|
|
|
|
if result: |
|
|
passed += 1 |
|
|
print(f"✅ {test_name} PASSOU") |
|
|
else: |
|
|
print(f"❌ {test_name} FALHOU") |
|
|
except Exception as e: |
|
|
print(f"❌ {test_name} ERRO: {e}") |
|
|
|
|
|
print("\n" + "=" * 50) |
|
|
print(f"📊 RESULTADO FINAL: {passed}/{total} testes passaram") |
|
|
|
|
|
if passed == total: |
|
|
print("🎉 TODOS OS TESTES PASSARAM!") |
|
|
print("🚀 Sistema pronto para uso!") |
|
|
print("💡 Execute: python testes/run_tests.py") |
|
|
else: |
|
|
print("⚠️ Alguns testes falharam") |
|
|
print("🔧 Verifique os erros acima") |
|
|
|
|
|
print("=" * 50) |
|
|
|
|
|
return passed == total |
|
|
|
|
|
if __name__ == '__main__': |
|
|
success = asyncio.run(main()) |
|
|
sys.exit(0 if success else 1) |
|
|
|