/ tests / run_tests.py
run_tests.py
  1  #!/usr/bin/env python3
  2  """
  3  Script pour exécuter les tests de l'API d'inférence multi-session.
  4  Ce script permet d'exécuter tous les tests ou des catégories spécifiques.
  5  """
  6  # Au début de votre fichier run_tests.py, ajoutez:
  7  import os
  8  os.environ["SAMPLE_VIDEO_PATH"] = "tests/fixtures/sample_video.mp4"
  9  import argparse
 10  import subprocess
 11  import sys
 12  import time
 13  
 14  def parse_args():
 15      parser = argparse.ArgumentParser(description="Exécute les tests de l'API d'inférence multi-session")
 16      
 17      parser.add_argument("--auth", action="store_true", help="Exécuter les tests d'authentification")
 18      parser.add_argument("--inference", action="store_true", help="Exécuter les tests d'inférence")
 19      parser.add_argument("--limits", action="store_true", help="Exécuter les tests des limites d'utilisation")
 20      parser.add_argument("--video", action="store_true", help="Exécuter les tests d'analyse vidéo")
 21      parser.add_argument("--transcription", action="store_true", help="Exécuter les tests de transcription")
 22      parser.add_argument("--task", action="store_true", help="Exécuter les tests de gestion des tâches")
 23      parser.add_argument("--health", action="store_true", help="Exécuter les tests de santé")
 24      parser.add_argument("--subscription", action="store_true", help="Exécuter les tests d'abonnement")
 25      parser.add_argument("--integration", action="store_true", help="Exécuter les tests d'intégration")
 26      parser.add_argument("--json-simplifier", action="store_true", help="Exécuter les tests du JSONSimplifier")
 27      parser.add_argument("--prompt-manager", action="store_true", help="Exécuter les tests du gestionnaire de prompts")
 28      parser.add_argument("--all", action="store_true", help="Exécuter tous les tests")
 29      parser.add_argument("--api-url", type=str, help="URL de base de l'API", default="http://localhost:8000")
 30      parser.add_argument("--api-key", type=str, help="Clé API à utiliser pour les tests")
 31      parser.add_argument("--premium-key", type=str, help="Clé API premium à utiliser pour les tests")
 32      parser.add_argument("--token", type=str, help="Token JWT à utiliser pour les tests")
 33      
 34      return parser.parse_args()
 35  
 36  def run_test_file(test_file, api_url=None, api_key=None, premium_key=None, token=None):
 37      """Exécute un fichier de test spécifique."""
 38      print(f"\n=== Exécution de {test_file} ===\n")
 39      
 40      # Préparer les variables d'environnement
 41      env = os.environ.copy()
 42      if api_url:
 43          env["API_BASE_URL"] = api_url
 44      if api_key:
 45          env["TEST_API_KEY"] = api_key
 46          env["TEST_FREE_API_KEY"] = api_key
 47      if premium_key:
 48          env["TEST_PREMIUM_API_KEY"] = premium_key
 49      if token:
 50          env["TEST_TOKEN"] = token
 51      
 52      # Exécuter le test
 53      try:
 54          result = subprocess.run([sys.executable, test_file], env=env, check=False)
 55          return result.returncode == 0
 56      except Exception as e:
 57          print(f"Erreur lors de l'exécution de {test_file}: {e}")
 58          return False
 59  
 60  def main():
 61      args = parse_args()
 62      
 63      # Si aucun test n'est spécifié, exécuter tous les tests
 64      if not (args.auth or args.inference or args.limits or args.video or 
 65              args.transcription or args.task or args.health or 
 66              args.subscription or args.integration or args.json_simplifier or
 67              args.prompt_manager or args.all):
 68          args.all = True
 69      
 70      # Déterminer quels tests exécuter
 71      tests_to_run = []
 72      if args.auth or args.all:
 73          tests_to_run.append("test_auth.py")
 74      if args.inference or args.all:
 75          tests_to_run.append("test_inference.py")
 76      if args.limits or args.all:
 77          tests_to_run.append("test_limits.py")
 78      if args.video or args.all:
 79          tests_to_run.append("test_video.py")
 80      if args.transcription or args.all:
 81          tests_to_run.append("test_transcription.py")
 82      if args.task or args.all:
 83          tests_to_run.append("test_task.py")
 84      if args.health or args.all:
 85          tests_to_run.append("test_health.py")
 86      if args.subscription or args.all:
 87          tests_to_run.append("test_subscription.py")
 88      if args.integration or args.all:
 89          tests_to_run.append("test_integration.py")
 90      if args.json_simplifier or args.all:
 91          tests_to_run.append("test_json_simplifier.py")
 92      if args.prompt_manager or args.all:
 93          tests_to_run.append("test_prompt_manager.py")
 94      
 95      # Afficher les paramètres
 96      print(f"URL de l'API: {args.api_url}")
 97      print(f"Tests à exécuter: {', '.join(tests_to_run)}")
 98      
 99      # Exécuter les tests
100      success = True
101      start_time = time.time()
102      
103      for test_file in tests_to_run:
104          if not run_test_file(test_file, args.api_url, args.api_key, args.premium_key, args.token):
105              success = False
106      
107      # Afficher le résultat global
108      execution_time = time.time() - start_time
109      print(f"\n=== Résultats des tests ===")
110      print(f"Temps d'exécution: {execution_time:.2f} secondes")
111      
112      if success:
113          print("\033[92mTous les tests ont réussi!\033[0m")
114          return 0
115      else:
116          print("\033[91mCertains tests ont échoué.\033[0m")
117          return 1
118  
119  if __name__ == "__main__":
120      sys.exit(main())