diff --git a/README_TP4.md b/README_TP4.md index 245e402..bc972b7 100644 --- a/README_TP4.md +++ b/README_TP4.md @@ -1,75 +1,98 @@ -# 🧪 TP4 - Tests automatisés avec Docker +# TP4 - Tests automatisés avec Docker -## 📋 Objectif -Automatiser les tests de l'application dans la CI 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 +## Consignes réalisées -### 1. ✅ Fichier `test_api.py` créé -- **Pytest** configuré pour tester l'API -- Tests pour vérifier que les endpoints retournent `status_code == 200` -- Tests complets pour tous les endpoints de l'API +### 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 ajouté +### 2. Workflow GitHub Actions implémenté - Pipeline automatisé dans `.github/workflows/test.yml` -- Tests exécutés avec Docker Compose -- Intégration continue configurée +- Exécution des tests via Docker Compose +- Configuration de l'intégration continue -### 3. ✅ Simulation d'erreur et correction -- Test simulé créé pour valider la détection automatique -- Erreur détectée par la CI (pipeline rouge) -- Test corrigé pour obtenir un pipeline vert +### 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 +## Architecture des tests ``` dockezr/ -├── .github/workflows/test.yml # Pipeline CI/CD +├── .github/workflows/ +│ ├── test.yml # Pipeline CI/CD principal +│ └── test-connectivity.yml # Pipeline simulation d'erreur ├── backend/ -│ ├── test_api.py # Tests Pytest +│ ├── 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.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 +## Tests implémentés | Test | Description | Status | |------|-------------|--------| -| `test_health_endpoint` | Vérifie `/health` retourne 200 | ✅ | -| `test_rooms_endpoint` | Vérifie `/rooms` retourne 200 | ✅ | -| `test_reservations_endpoint` | Vérifie `/reservations` retourne 200 | ✅ | -| `test_root_endpoint` | Vérifie `/` retourne 200 | ✅ | -| `test_room_by_id` | Test récupération salle par ID | ✅ | -| `test_room_not_found` | Test ID inexistant (404) | ✅ | -| `test_reservations_by_date` | Test réservations par date | ✅ | -| `test_simulated_error` | Test simulé (corrigé) | ✅ | -| `test_api_response_time` | Test performance API | ✅ | +| `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 pour lancer les tests +## Commandes d'exécution ### Tests locaux avec Docker ```bash -# Démarrer les services +# Démarrage des services docker-compose up -d db backend -# Lancer les tests +# Exécution des tests docker-compose --profile test up --build --abort-on-container-exit test -# Ou utiliser le script -./test.sh # Linux/Mac -test.bat # Windows +# 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 +### Tests avec couverture de code ```bash docker-compose run --rm test pytest test_api.py --cov=. --cov-report=html ``` -## 📊 Résultats des tests +### Tests de simulation d'erreur +```bash +# 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 @@ -88,14 +111,21 @@ test_api.py::test_api_response_time PASSED [100%] ============================== 9 passed in 0.06s =============================== ``` -## 🎯 Livrables +### 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! +``` -- ✅ **Fichier `test_api.py`** - Tests Pytest complets -- ✅ **Pipeline "vert"** - Tous les tests passent -- ✅ **Workflow GitHub Actions** - CI/CD automatisée -- ✅ **Configuration Docker** - Tests intégrés dans Docker +## Livrables -## 🔧 Configuration technique +- **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) @@ -107,6 +137,6 @@ test_api.py::test_api_response_time PASSED [100%] - `pytest-cov==4.1.0` - Couverture de code - `pytest-timeout==2.1.0` - Timeout des tests -## 🎉 TP4 terminé avec succès ! +## Validation TP4 -Le système de tests automatisés est maintenant opérationnel et prêt pour la production. +Le système de tests automatisés est opérationnel avec validation de la détection automatique d'erreur.