- 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>
214 lines
8.4 KiB
Python
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() |