- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
290 lines
8.1 KiB
Python
290 lines
8.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Test de la Démonstration Réellele
|
|
Auteur : Dom, Alice, Kiro - 7 janvier 2026
|
|
|
|
Script de test pour vérifier que le système de démonstration réelle fonctionne correctement.
|
|
Utis.
|
|
"
|
|
|
|
import sys
|
|
import time
|
|
import requsts
|
|
import json
|
|
rocess
|
|
import os
|
|
from path
|
|
from typing import Dict, Any, Optiont
|
|
|
|
# Import des composants réels du système
|
|
sys.)
|
|
|
|
try:
|
|
from core
|
|
from core.detection.ui_detector import UIDetector
|
|
from core.execution.action_executor import ActionExecr
|
|
fdge
|
|
|
|
CORE_AVAILABe
|
|
exce
|
|
print(f"⚠️ Composants core non dispo{e}")
|
|
CORE_AVAe = FalsLABLEInibles: rror as e:pt ImportELE = TruiceionServonIntegratort Executigration impecution_inteices.exnd.servuilder.backeflow_brksual_wom virof, WorkflowEorkflowNodet Wporaph im.workflow_grre.models coromutoapturerport ScreenCurer imaptscreen_ce.tur.capnt.parent)).pareath(__file__str(Ph.insert(0, patal, Lisimport Paib thlort subpimp
|
|
|
|
def test_demo_server():
|
|
"""
|
|
Test du serveur de démonstration
|
|
"""
|
|
print("🧪 Test du serveur de démonstration...")
|
|
|
|
base_url = "http://localhost:5003/api/demo"
|
|
|
|
tests = [
|
|
("Éléments UI", f"{base_url}/elements", "GET"),
|
|
("Capture d'écran", f"{base_url}/screen", "GET"),
|
|
]
|
|
|
|
results = []
|
|
|
|
for test_name, url, method in tests:
|
|
try:
|
|
if method == "GET":
|
|
response = requests.get(url, timeout=5)
|
|
|
|
if response.status_code == 200:
|
|
print(f"✅ {test_name}: OK")
|
|
results.append(True)
|
|
else:
|
|
print(f"❌ {test_name}: Erreur {response.status_code}")
|
|
results.append(False)
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ {test_name}: Connexion impossible - {e}")
|
|
results.append(False)
|
|
|
|
return all(results)
|
|
|
|
def test_action_execution():
|
|
"""
|
|
Test d'exécution d'action
|
|
"""
|
|
print("🧪 Test d'exécution d'action...")
|
|
|
|
url = "http://localhost:5003/api/demo/execute"
|
|
|
|
# Test d'un clic simple
|
|
action_data = {
|
|
"type": "click",
|
|
"target": {"x": 100, "y": 100}
|
|
}
|
|
|
|
try:
|
|
response = requests.post(
|
|
url,
|
|
json=action_data,
|
|
headers={"Content-Type": "application/json"},
|
|
timeout=5
|
|
)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
if result.get("success"):
|
|
print("✅ Exécution d'action: OK")
|
|
return True
|
|
else:
|
|
print(f"❌ Exécution d'action: {result.get('message')}")
|
|
return False
|
|
else:
|
|
print(f"❌ Exécution d'action: Erreur {response.status_code}")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Exécution d'action: Connexion impossible - {e}")
|
|
return False
|
|
|
|
def test_workflow_execution():
|
|
"""
|
|
Test d'exécution de workflow
|
|
"""
|
|
print("🧪 Test d'exécution de workflow...")
|
|
|
|
url = "http://localhost:5003/api/demo/workflow/execute"
|
|
|
|
# Workflow de test simple
|
|
workflow_data = {
|
|
"id": "test_workflow",
|
|
"steps": [
|
|
{
|
|
"type": "wait",
|
|
"duration": 0.5
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": {"x": 50, "y": 50}
|
|
}
|
|
]
|
|
}
|
|
|
|
try:
|
|
response = requests.post(
|
|
url,
|
|
json=workflow_data,
|
|
headers={"Content-Type": "application/json"},
|
|
timeout=10
|
|
)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
if result.get("success"):
|
|
steps_executed = result.get("steps_executed", 0)
|
|
print(f"✅ Exécution de workflow: OK ({steps_executed} étapes)")
|
|
return True
|
|
else:
|
|
print(f"❌ Exécution de workflow: {result.get('message')}")
|
|
return False
|
|
else:
|
|
print(f"❌ Exécution de workflow: Erreur {response.status_code}")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Exécution de workflow: Connexion impossible - {e}")
|
|
return False
|
|
|
|
def test_backend_api():
|
|
"""
|
|
Test de l'API backend
|
|
"""
|
|
print("🧪 Test de l'API backend...")
|
|
|
|
base_url = "http://localhost:5002/api"
|
|
|
|
tests = [
|
|
("Workflows", f"{base_url}/workflows", "GET"),
|
|
]
|
|
|
|
results = []
|
|
|
|
for test_name, url, method in tests:
|
|
try:
|
|
if method == "GET":
|
|
response = requests.get(url, timeout=5)
|
|
|
|
if response.status_code in [200, 404]: # 404 est OK si pas de workflows
|
|
print(f"✅ {test_name}: OK")
|
|
results.append(True)
|
|
else:
|
|
print(f"❌ {test_name}: Erreur {response.status_code}")
|
|
results.append(False)
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ {test_name}: Connexion impossible - {e}")
|
|
results.append(False)
|
|
|
|
return all(results)
|
|
|
|
def test_frontend():
|
|
"""
|
|
Test du frontend
|
|
"""
|
|
print("🧪 Test du frontend...")
|
|
|
|
try:
|
|
response = requests.get("http://localhost:3000", timeout=5)
|
|
|
|
if response.status_code == 200:
|
|
print("✅ Frontend: OK")
|
|
return True
|
|
else:
|
|
print(f"❌ Frontend: Erreur {response.status_code}")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Frontend: Connexion impossible - {e}")
|
|
return False
|
|
|
|
def test_data_files():
|
|
"""
|
|
Test des fichiers de données
|
|
"""
|
|
print("🧪 Test des fichiers de données...")
|
|
|
|
demo_path = Path("data/demo")
|
|
|
|
if not demo_path.exists():
|
|
print("❌ Dossier data/demo n'existe pas")
|
|
return False
|
|
|
|
# Vérifier les fichiers générés
|
|
files_to_check = [
|
|
"current_screen.png",
|
|
"current_elements.json"
|
|
]
|
|
|
|
results = []
|
|
|
|
for filename in files_to_check:
|
|
file_path = demo_path / filename
|
|
if file_path.exists():
|
|
print(f"✅ {filename}: Trouvé")
|
|
results.append(True)
|
|
else:
|
|
print(f"⚠️ {filename}: Non trouvé (normal si pas encore généré)")
|
|
results.append(True) # Pas critique
|
|
|
|
return all(results)
|
|
|
|
def main():
|
|
"""
|
|
Exécute tous les tests
|
|
"""
|
|
print("🎭 Test de la Démonstration Réelle du Visual Workflow Builder")
|
|
print("=" * 70)
|
|
|
|
tests = [
|
|
("Services Backend", test_backend_api),
|
|
("Serveur de Démonstration", test_demo_server),
|
|
("Frontend React", test_frontend),
|
|
("Fichiers de Données", test_data_files),
|
|
("Exécution d'Actions", test_action_execution),
|
|
("Exécution de Workflows", test_workflow_execution),
|
|
]
|
|
|
|
results = []
|
|
|
|
for test_name, test_func in tests:
|
|
print(f"\n📋 {test_name}")
|
|
print("-" * 40)
|
|
|
|
try:
|
|
result = test_func()
|
|
results.append((test_name, result))
|
|
except Exception as e:
|
|
print(f"❌ Erreur inattendue: {e}")
|
|
results.append((test_name, False))
|
|
|
|
# Résumé des résultats
|
|
print("\n" + "=" * 70)
|
|
print("📊 RÉSUMÉ DES TESTS")
|
|
print("=" * 70)
|
|
|
|
passed = 0
|
|
total = len(results)
|
|
|
|
for test_name, result in results:
|
|
status = "✅ RÉUSSI" if result else "❌ ÉCHEC"
|
|
print(f"{test_name:.<40} {status}")
|
|
if result:
|
|
passed += 1
|
|
|
|
print("-" * 70)
|
|
print(f"Total: {passed}/{total} tests réussis")
|
|
|
|
if passed == total:
|
|
print("\n🎉 Tous les tests sont réussis ! La démonstration est prête.")
|
|
return 0
|
|
else:
|
|
print(f"\n⚠️ {total - passed} test(s) ont échoué. Vérifiez la configuration.")
|
|
return 1
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |