1
0

test_redirections.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/usr/bin/env python3
  2. """
  3. Script de test pour vérifier les redirections 301
  4. Teste que les anciennes URLs redirigent correctement vers les nouvelles
  5. """
  6. import requests
  7. import sys
  8. from urllib.parse import urljoin
  9. # Configuration
  10. BASE_URL = "https://www.duhaz.fr"
  11. TEST_MODE = True # Mettre False pour tester en production
  12. # URLs à tester
  13. test_urls = {
  14. "Ancienne catégorie avec /": {
  15. "url": "/blog/category/django/",
  16. "expected_redirect": "/blog/cat/django",
  17. "status_code": 301
  18. },
  19. "Ancienne catégorie sans /": {
  20. "url": "/blog/category/django",
  21. "expected_redirect": "/blog/cat/django",
  22. "status_code": 301
  23. },
  24. "Tag avec trailing slash": {
  25. "url": "/blog/tag/linux/",
  26. "expected_redirect": "/blog/tag/linux",
  27. "status_code": 301
  28. },
  29. "Article avec trailing slash": {
  30. "url": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git/",
  31. "expected_redirect": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git",
  32. "status_code": 301
  33. }
  34. }
  35. def test_redirections():
  36. """Teste toutes les redirections"""
  37. print("=" * 70)
  38. print("TEST DES REDIRECTIONS 301")
  39. print("=" * 70)
  40. print(f"\nBase URL: {BASE_URL}")
  41. print(f"Mode: {'TEST (local)' if TEST_MODE else 'PRODUCTION'}\n")
  42. success = 0
  43. failures = 0
  44. for test_name, test_data in test_urls.items():
  45. url = urljoin(BASE_URL, test_data['url'])
  46. expected_redirect = urljoin(BASE_URL, test_data['expected_redirect'])
  47. print(f"Test: {test_name}")
  48. print(f" URL: {test_data['url']}")
  49. try:
  50. # Ne pas suivre les redirections automatiquement
  51. response = requests.get(url, allow_redirects=False, timeout=10)
  52. # Vérifier le code de statut
  53. if response.status_code == test_data['status_code']:
  54. print(f" ✓ Code de statut: {response.status_code} (OK)")
  55. # Vérifier la destination de la redirection
  56. if 'Location' in response.headers:
  57. redirect_location = response.headers['Location']
  58. # Normaliser l'URL de redirection (enlever le domaine si présent)
  59. if redirect_location.startswith('http'):
  60. # URL absolue
  61. actual_redirect = redirect_location
  62. else:
  63. # URL relative, la convertir en absolue
  64. actual_redirect = urljoin(BASE_URL, redirect_location)
  65. if actual_redirect == expected_redirect:
  66. print(f" ✓ Redirection: {redirect_location} (OK)")
  67. print(" ✓ TEST RÉUSSI\n")
  68. success += 1
  69. else:
  70. print(f" ✗ Redirection attendue: {test_data['expected_redirect']}")
  71. print(f" ✗ Redirection reçue: {redirect_location}")
  72. print(" ✗ TEST ÉCHOUÉ\n")
  73. failures += 1
  74. else:
  75. print(f" ✗ Pas d'en-tête Location dans la réponse")
  76. print(" ✗ TEST ÉCHOUÉ\n")
  77. failures += 1
  78. else:
  79. print(f" ✗ Code de statut: {response.status_code} (attendu: {test_data['status_code']})")
  80. print(" ✗ TEST ÉCHOUÉ\n")
  81. failures += 1
  82. except requests.RequestException as e:
  83. print(f" ✗ Erreur de connexion: {e}")
  84. print(" ✗ TEST ÉCHOUÉ\n")
  85. failures += 1
  86. # Résumé
  87. print("=" * 70)
  88. print("RÉSUMÉ")
  89. print("=" * 70)
  90. print(f"Tests réussis: {success}/{len(test_urls)}")
  91. print(f"Tests échoués: {failures}/{len(test_urls)}")
  92. if failures == 0:
  93. print("\n✓ Tous les tests sont passés avec succès !")
  94. return 0
  95. else:
  96. print(f"\n✗ {failures} test(s) ont échoué")
  97. return 1
  98. if __name__ == "__main__":
  99. print("\n⚠️ IMPORTANT: Assurez-vous que le serveur Django est démarré !")
  100. print("⚠️ Si vous testez en local, modifiez BASE_URL dans le script\n")
  101. input("Appuyez sur Entrée pour continuer...")
  102. exit_code = test_redirections()
  103. sys.exit(exit_code)