5.4 KiB
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 testrequests==2.31.0- Client HTTPpytest-cov==4.1.0- Couverture de codepytest-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.