Update README_TP4.md with technical documentation

This commit is contained in:
Rassaby Ludovic
2025-10-14 13:33:12 +04:00
parent 6729080571
commit 4291072b08
+75 -45
View File
@@ -1,75 +1,98 @@
# 🧪 TP4 - Tests automatisés avec Docker # TP4 - Tests automatisés avec Docker
## 📋 Objectif ## Objectif
Automatiser les tests de l'application dans la CI avec Docker. 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éé ### 1. Fichier `test_api.py` créé
- **Pytest** configuré pour tester l'API - Framework Pytest configuré pour les tests d'API
- Tests pour vérifier que les endpoints retournent `status_code == 200` - Validation des endpoints retournant `status_code == 200`
- Tests complets pour tous les endpoints de l'API - Couverture complète des endpoints de l'API
### 2. Workflow GitHub Actions ajou ### 2. Workflow GitHub Actions implémen
- Pipeline automatisé dans `.github/workflows/test.yml` - Pipeline automatisé dans `.github/workflows/test.yml`
- Tests exécutés avec Docker Compose - Exécution des tests via Docker Compose
- Intégration continue configurée - Configuration de l'intégration continue
### 3. Simulation d'erreur et correction ### 3. Simulation d'erreur et validation
- Test simulé créé pour valider la détection automatique - Tests de simulation d'erreur pour validation de la détection automatique
- Erreur détectée par la CI (pipeline rouge) - Détection d'erreur par la CI (pipeline rouge)
- Test corrigé pour obtenir un pipeline vert - Correction des tests pour validation du pipeline vert
## 🏗️ Architecture des tests ## Architecture des tests
``` ```
dockezr/ dockezr/
├── .github/workflows/test.yml # Pipeline CI/CD ├── .github/workflows/
│ ├── test.yml # Pipeline CI/CD principal
│ └── test-connectivity.yml # Pipeline simulation d'erreur
├── backend/ ├── 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 │ ├── requirements-test.txt # Dépendances tests
│ └── Dockerfile.test # Image Docker pour tests │ └── Dockerfile.test # Image Docker pour tests
├── docker-compose.yml # Configuration avec service test ├── docker-compose.yml # Configuration avec service test
├── test.sh # Script de test (Linux/Mac) ├── 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 | Description | Status |
|------|-------------|--------| |------|-------------|--------|
| `test_health_endpoint` | Vérifie `/health` retourne 200 | | | `test_health_endpoint` | Validation `/health` retourne 200 | Pass |
| `test_rooms_endpoint` | Vérifie `/rooms` retourne 200 | | | `test_rooms_endpoint` | Validation `/rooms` retourne 200 | Pass |
| `test_reservations_endpoint` | Vérifie `/reservations` retourne 200 | | | `test_reservations_endpoint` | Validation `/reservations` retourne 200 | Pass |
| `test_root_endpoint` | Vérifie `/` retourne 200 | | | `test_root_endpoint` | Validation `/` retourne 200 | Pass |
| `test_room_by_id` | Test récupération salle par ID | | | `test_room_by_id` | Test récupération salle par ID | Pass |
| `test_room_not_found` | Test ID inexistant (404) | | | `test_room_not_found` | Test ID inexistant (404) | Pass |
| `test_reservations_by_date` | Test réservations par date | | | `test_reservations_by_date` | Test réservations par date | Pass |
| `test_simulated_error` | Test simulé (corrigé) | | | `test_simulated_error` | Test simulé (corrigé) | Pass |
| `test_api_response_time` | Test performance API | | | `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 ### Tests locaux avec Docker
```bash ```bash
# Démarrer les services # Démarrage des services
docker-compose up -d db backend docker-compose up -d db backend
# Lancer les tests # Exécution des tests
docker-compose --profile test up --build --abort-on-container-exit test docker-compose --profile test up --build --abort-on-container-exit test
# Ou utiliser le script # Scripts d'automatisation
./test.sh # Linux/Mac ./test.sh # Linux/Mac
test.bat # Windows 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 ```bash
docker-compose run --rm test pytest test_api.py --cov=. --cov-report=html 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 ============================== ============================= test session starts ==============================
platform linux -- Python 3.11.14, pytest-7.4.3, pluggy-1.6.0 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 =============================== ============================== 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 ## Livrables
-**Pipeline "vert"** - Tous les tests passent
-**Workflow GitHub Actions** - CI/CD automatisée
-**Configuration Docker** - Tests intégrés dans Docker
## 🔧 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 ### Variables d'environnement
- `API_BASE_URL`: URL de l'API (défaut: http://localhost:8000) - `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-cov==4.1.0` - Couverture de code
- `pytest-timeout==2.1.0` - Timeout des tests - `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.