v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- 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>
This commit is contained in:
290
visual_workflow_builder/test_real_demo.py
Normal file
290
visual_workflow_builder/test_real_demo.py
Normal file
@@ -0,0 +1,290 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user