Update README_TP4.md with technical documentation
This commit is contained in:
+73
-43
@@ -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 ajouté
|
### 2. Workflow GitHub Actions implémenté
|
||||||
- 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.
|
||||||
|
|||||||
Reference in New Issue
Block a user