Files
rpa_vision_v3/test_integration_complete_finale.py
Dom a27b74cf22 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>
2026-01-29 11:23:51 +01:00

214 lines
8.4 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Test d'Intégration Complète - Système de Capture d'Écran Réelle
Auteur : Dom, Alice, Kiro - 8 janvier 2026
Test final pour valider l'intégration complète du système.
"""
import requests
import time
import json
def test_integration_complete():
"""Test d'intégration complète du système"""
print("🔍 Test d'Intégration Complète - Système de Capture d'Écran Réelle")
print("=" * 70)
base_url = "http://localhost:5002/api/real-demo"
try:
# 1. Test de connectivité
print("1. Test de connectivité...")
response = requests.get(f"{base_url}/capture/status", timeout=5)
if response.status_code == 200:
print(" ✅ Backend accessible")
else:
print(f" ❌ Backend inaccessible (status: {response.status_code})")
return False
# 2. Test des moniteurs
print("2. Test de détection des moniteurs...")
response = requests.get(f"{base_url}/monitors")
if response.status_code == 200:
data = response.json()
monitors = data.get('monitors', [])
print(f"{len(monitors)} moniteurs détectés")
for monitor in monitors:
print(f" - Moniteur {monitor['id']}: {monitor['width']}x{monitor['height']}")
else:
print(" ❌ Échec détection moniteurs")
return False
# 3. Test de démarrage de capture
print("3. Test de démarrage de capture...")
response = requests.post(
f"{base_url}/capture/start",
json={"interval": 1.0},
headers={"Content-Type": "application/json"}
)
if response.status_code == 200:
data = response.json()
if data.get('success'):
print(" ✅ Capture démarrée avec succès")
else:
print(" ❌ Échec démarrage capture")
return False
else:
print(f" ❌ Erreur HTTP: {response.status_code}")
return False
# 4. Attendre la capture
print("4. Attente de la capture (3 secondes)...")
time.sleep(3)
# 5. Test de statut pendant la capture
print("5. Test de statut pendant la capture...")
response = requests.get(f"{base_url}/capture/status")
if response.status_code == 200:
data = response.json()
status = data.get('status', {})
if status.get('is_capturing') and status.get('has_screenshot'):
print(" ✅ Capture active avec screenshot disponible")
print(f" - Intervalle: {status.get('capture_interval')}s")
print(f" - Moniteurs: {status.get('monitors_count')}")
print(f" - Éléments détectés: {status.get('elements_detected')}")
else:
print(" ⚠️ Capture active mais pas de screenshot")
else:
print(" ❌ Échec récupération statut")
# 6. Test de récupération de screenshot
print("6. Test de récupération de screenshot...")
response = requests.get(f"{base_url}/capture/screenshot")
if response.status_code == 200:
data = response.json()
if data.get('success') and data.get('screenshot'):
screenshot = data['screenshot']
if screenshot.startswith('data:image/jpeg;base64,'):
print(f" ✅ Screenshot récupéré ({len(screenshot)} caractères)")
print(f" - Format: JPEG base64")
print(f" - Éléments: {len(data.get('elements', []))}")
else:
print(" ❌ Format de screenshot invalide")
else:
print(" ❌ Pas de screenshot disponible")
else:
print(f" ❌ Erreur récupération screenshot: {response.status_code}")
# 7. Test des éléments détectés
print("7. Test des éléments détectés...")
response = requests.get(f"{base_url}/elements")
if response.status_code == 200:
data = response.json()
elements = data.get('elements', [])
print(f"{len(elements)} éléments détectés")
if elements:
for i, element in enumerate(elements[:3]): # Afficher les 3 premiers
print(f" - Élément {i+1}: {element.get('type', 'unknown')} ({element.get('confidence', 0):.2f})")
else:
print(" ❌ Échec récupération éléments")
# 8. Test d'arrêt de capture
print("8. Test d'arrêt de capture...")
response = requests.post(f"{base_url}/capture/stop")
if response.status_code == 200:
data = response.json()
if data.get('success'):
print(" ✅ Capture arrêtée avec succès")
else:
print(" ❌ Échec arrêt capture")
else:
print(f" ❌ Erreur arrêt: {response.status_code}")
# 9. Vérification de l'arrêt
print("9. Vérification de l'arrêt...")
time.sleep(1)
response = requests.get(f"{base_url}/capture/status")
if response.status_code == 200:
data = response.json()
status = data.get('status', {})
if not status.get('is_capturing'):
print(" ✅ Capture correctement arrêtée")
else:
print(" ⚠️ Capture encore active")
# 10. Test de sécurité (arrêt d'urgence)
print("10. Test d'arrêt d'urgence...")
response = requests.post(f"{base_url}/safety/emergency-stop")
if response.status_code == 200:
data = response.json()
if data.get('success'):
print(" ✅ Arrêt d'urgence fonctionnel")
else:
print(" ❌ Échec arrêt d'urgence")
print("\n" + "=" * 70)
print("🎉 INTÉGRATION COMPLÈTE VALIDÉE AVEC SUCCÈS !")
print("✅ Tous les composants fonctionnent correctement")
print("✅ API REST entièrement opérationnelle")
print("✅ Capture d'écran réelle fonctionnelle")
print("✅ Système prêt pour l'utilisation en production")
return True
except requests.exceptions.RequestException as e:
print(f"\n❌ Erreur de connexion: {e}")
print("Vérifiez que le serveur backend est démarré sur le port 5002")
return False
except Exception as e:
print(f"\n❌ Erreur inattendue: {e}")
return False
def test_frontend_connectivity():
"""Test de connectivité du frontend"""
print("\n🌐 Test de Connectivité Frontend")
print("-" * 40)
try:
response = requests.get("http://localhost:3000", timeout=5)
if response.status_code == 200:
print("✅ Frontend React accessible sur http://localhost:3000")
return True
else:
print(f"❌ Frontend inaccessible (status: {response.status_code})")
return False
except requests.exceptions.RequestException as e:
print(f"❌ Frontend non accessible: {e}")
return False
def main():
"""Fonction principale"""
print("🚀 VALIDATION FINALE - SYSTÈME DE CAPTURE D'ÉCRAN RÉELLE")
print("=" * 70)
# Test du frontend
frontend_ok = test_frontend_connectivity()
# Test du backend
backend_ok = test_integration_complete()
print("\n" + "=" * 70)
print("📋 RÉSUMÉ FINAL")
print("=" * 70)
if frontend_ok and backend_ok:
print("🎉 SYSTÈME ENTIÈREMENT FONCTIONNEL !")
print("✅ Frontend React : Opérationnel")
print("✅ Backend Flask : Opérationnel")
print("✅ Capture d'écran : Fonctionnelle")
print("✅ API REST : Complète")
print("\n🎯 Le système est prêt pour la démonstration !")
print(" 👉 Accédez à http://localhost:3000")
print(" 👉 Naviguez vers 'Démonstration Réelle' > 'Capture d'Écran Réelle'")
else:
print("❌ PROBLÈMES DÉTECTÉS")
if not frontend_ok:
print("❌ Frontend React : Problème")
if not backend_ok:
print("❌ Backend Flask : Problème")
print("\n🔧 Vérifiez les services et relancez les tests")
if __name__ == "__main__":
main()