Files
dockezr/README_TP4.md
T
2025-10-14 13:33:12 +04:00

5.4 KiB

TP4 - Tests automatisés avec Docker

Objectif

Implémentation d'un système de tests automatisés intégré dans la CI/CD avec Docker.

Consignes réalisées

1. Fichier test_api.py créé

  • Framework Pytest configuré pour les tests d'API
  • Validation des endpoints retournant status_code == 200
  • Couverture complète des endpoints de l'API

2. Workflow GitHub Actions implémenté

  • Pipeline automatisé dans .github/workflows/test.yml
  • Exécution des tests via Docker Compose
  • Configuration de l'intégration continue

3. Simulation d'erreur et validation

  • Tests de simulation d'erreur pour validation de la détection automatique
  • Détection d'erreur par la CI (pipeline rouge)
  • Correction des tests pour validation du pipeline vert

Architecture des tests

dockezr/
├── .github/workflows/
│   ├── test.yml                  # Pipeline CI/CD principal
│   └── test-connectivity.yml     # Pipeline simulation d'erreur
├── backend/
│   ├── test_api.py               # Tests Pytest principaux
│   ├── test_connectivity.py      # Tests de connectivité
│   ├── test_error_simulation.py  # Tests de simulation d'erreur
│   ├── requirements-test.txt     # Dépendances tests
│   └── Dockerfile.test           # Image Docker pour tests
├── docker-compose.yml            # Configuration avec service test
├── test.sh                       # Script de test (Linux/Mac)
├── test.bat                      # Script de test (Windows)
├── test-connectivity.sh          # Script simulation d'erreur (Linux/Mac)
└── test-connectivity.bat         # Script simulation d'erreur (Windows)

Tests implémentés

Test Description Status
test_health_endpoint Validation /health retourne 200 Pass
test_rooms_endpoint Validation /rooms retourne 200 Pass
test_reservations_endpoint Validation /reservations retourne 200 Pass
test_root_endpoint Validation / retourne 200 Pass
test_room_by_id Test récupération salle par ID Pass
test_room_not_found Test ID inexistant (404) Pass
test_reservations_by_date Test réservations par date Pass
test_simulated_error Test simulé (corrigé) Pass
test_api_response_time Test performance API Pass
test_backend_connection_timeout Simulation erreur connectivité Fail (intentionnel)
test_misconfigured_endpoint Simulation erreur configuration Fail (intentionnel)

Commandes d'exécution

Tests locaux avec Docker

# Démarrage des services
docker-compose up -d db backend

# Exécution des tests
docker-compose --profile test up --build --abort-on-container-exit test

# Scripts d'automatisation
./test.sh                    # Linux/Mac
test.bat                     # Windows
./test-connectivity.sh       # Simulation d'erreur (Linux/Mac)
test-connectivity.bat        # Simulation d'erreur (Windows)

Tests avec couverture de code

docker-compose run --rm test pytest test_api.py --cov=. --cov-report=html

Tests de simulation d'erreur

# Tests de connectivité avec erreurs intentionnelles
docker-compose run --rm test python -c "
import requests
try:
    response = requests.get('http://backend:9999/health', timeout=2)
except Exception as e:
    print('Erreur de connectivité simulée:', e)
"

Résultats des tests

Tests principaux (Pipeline vert)

============================= test session starts ==============================
platform linux -- Python 3.11.14, pytest-7.4.3, pluggy-1.6.0
collected 9 items

test_api.py::TestAPI::test_health_endpoint PASSED                        [ 11%]
test_api.py::TestAPI::test_rooms_endpoint PASSED                         [ 22%]
test_api.py::TestAPI::test_reservations_endpoint PASSED                  [ 33%]
test_api.py::TestAPI::test_root_endpoint PASSED                          [ 44%]
test_api.py::TestAPI::test_room_by_id PASSED                             [ 55%]
test_api.py::TestAPI::test_room_not_found PASSED                         [ 66%]
test_api.py::TestAPI::test_reservations_by_date PASSED                   [ 77%]
test_api.py::test_simulated_error PASSED                                 [ 88%]
test_api.py::test_api_response_time PASSED                               [100%]

============================== 9 passed in 0.06s ===============================

Tests de simulation d'erreur (Pipeline rouge)

❌ Erreur de connectivité simulée détectée: HTTPConnectionPool(host='backend', port=9999): Max retries exceeded...
✅ La détection automatique d'erreur fonctionne!

Livrables

  • Fichier test_api.py - Tests Pytest complets
  • Pipeline vert - Validation des tests normaux
  • Pipeline rouge - Détection automatique d'erreur
  • Workflow GitHub Actions - CI/CD automatisée
  • Configuration Docker - Tests intégrés dans Docker

Configuration technique

Variables d'environnement

  • API_BASE_URL: URL de l'API (défaut: http://localhost:8000)
  • DATABASE_URL: URL de la base de données PostgreSQL

Dépendances de test

  • pytest==7.4.3 - Framework de test
  • requests==2.31.0 - Client HTTP
  • pytest-cov==4.1.0 - Couverture de code
  • pytest-timeout==2.1.0 - Timeout des tests

Validation TP4

Le système de tests automatisés est opérationnel avec validation de la détection automatique d'erreur.