This commit is contained in:
2025-12-14 10:40:54 +01:00
parent 5d483b0df5
commit 8428bf9c82
55 changed files with 9763 additions and 391 deletions

263
docs/09_tests_qualite.md Normal file
View File

@@ -0,0 +1,263 @@
# 09 Stratégie de tests, validation et qualité pour Linux BenchTools
Objectif : définir comment tester et valider chaque brique de lapplication
(backend, script bench, frontend), afin dassurer fiabilité, reproductibilité des mesures
et facilité de maintenance.
Ce document sert de guide pour écrire les tests et scénarios de validation manuelle.
---
# 1. Périmètre des tests
Les tests couvrent :
1. **Backend API**
- Validation des endpoints
- Validation de la persistance en base
- Validation de la sécurité (token)
2. **Script client `bench.sh`**
- Fonctionnement sur différentes machines Debian/Ubuntu
- Gestion des erreurs (outils manquants, serveur indisponible)
- Qualité du JSON envoyé
3. **Frontend WebUI**
- Rendu des pages (Dashboard, Devices, Device Detail, Settings)
- Consommation correcte de lAPI
- UX minimale (lisibilité, tri, navigation)
4. **Tests de bout en bout (E2E)**
- Exécution complète dun bench depuis un client → apparition dans le Dashboard.
---
# 2. Tests Backend
## 2.1. Types de tests
- **Tests unitaires** : fonctions isolées (scoring, mapping JSON → modèles).
- **Tests dintégration** : endpoints FastAPI avec base SQLite de test.
- **Tests E2E API** : envoi dun payload complet depuis un script de test.
Framework recommandé :
- `pytest`
- `httpx` ou client de test FastAPI
## 2.2. Cas de test principaux
### a) POST /api/benchmark
- [OK] Payload complet, token valide :
- Retourne 200
- Crée un `device` si inexistant
- Crée un `hardware_snapshot`
- Crée un `benchmark`
- [OK] Device existant :
- Réutilise le `device`
- [ERR] Token manquant :
- 401
- [ERR] Token incorrect :
- 401
- [ERR] JSON invalide :
- 400
### b) GET /api/devices
- [OK] Base vide → items = [].
- [OK] Avec plusieurs devices et benchmarks :
- Retourne un `last_benchmark` cohérent.
- [OK] Paramètres `page`, `page_size` :
- Pagination effective.
### c) GET /api/devices/{id}
- [OK] Device existant :
- Retourne résumé, snapshot, dernier benchmark.
- [ERR] Device inexistant :
- 404.
### d) Liens constructeur
- [OK] CRUD complet sur `/api/devices/{id}/links`.
- [ERR] URL invalide (peut être toléré ou validé selon règle).
### e) Documents
- [OK] Upload PDF :
- Fichier stocké physiquement
- Entrée BDD créée
- [OK] Download :
- Renvoie bon `Content-Type`
- [ERR] doc_id invalide :
- 404.
---
# 3. Tests Script client (bench.sh)
## 3.1. Contexte
Les tests sur `bench.sh` sont principalement :
- des tests manuels guidés
- des tests automatisables partiellement (CI dans un container Docker).
## 3.2. Cas de test
### a) Aide & usage
- `bench.sh --help` → affiche usage.
- Sans arguments → erreur claire.
### b) Prérequis
- Si `curl`, `jq`, `sysbench`, `fio` manquants :
- message explicite
- tentative dinstallation si possible (apt-get)
- en cas déchec, test concerné désactivé mais script continue.
### c) Exécution minimale
- `bench.sh --server http://backend:8007/api/benchmark --token XXX` :
- Détecte le hostname
- Exécute les tests par défaut
- Envoie un JSON valide (vérifiable via logs backend).
### d) Modes doptions
- `--short` :
- Durées de tests CPU/mémoire/disk raccourcies
- `--skip-network` :
- Aucun test iperf3, bloc `results.network` absent ou null
- `--iperf-server` avec serveur iperf opérationnel :
- Champs réseau correctement renseignés.
### e) Gestion des erreurs réseau
- Backend down :
- Message derreur clair
- Code HTTP ≠ 200 connu
- Iperf3 indisponible :
- Bloc network absent/null
---
# 4. Tests Frontend
## 4.1. Smoke tests (manuels)
- Accès à :
- `/` → Dashboard
- `/devices`
- `/devices/{id}`
- `/settings`
- Vérification du rendu :
- Aucune erreur JS console
- Chargement des datas via API
- Tri de base dans les tableaux
## 4.2. Tests fonctionnels (scénarios)
### Scénario 1 : Premier lancement
1. Déployer lapplication.
2. Vérifier Dashboard vide, message “Aucun device”.
3. Exécuter `bench.sh` sur une machine.
4. Rafraîchir Dashboard :
- Device apparaît avec score.
### Scénario 2 : consultation dun device
1. Cliquer sur un device dans le Dashboard.
2. Page détail :
- Hardware résumé cohérent.
- Dernier benchmark affiché.
3. Onglet Benchmarks :
- Historique listé.
### Scénario 3 : Documents
1. Aller dans onglet Documents dun device.
2. Uploader un PDF.
3. Vérifier sa présence dans la liste.
4. Télécharger pour confirmer.
### Scénario 4 : Liens constructeur
1. Onglet Links dun device.
2. Ajouter un lien avec label + URL.
3. Vérifier quil est cliquable.
4. Tester suppression.
---
# 5. Tests E2E (de bout en bout)
Objectif : couvrir la chaîne complète depuis la machine cliente jusquau Dashboard.
### Scénario E2E type
1. Lancer backend + frontend via `docker compose up`.
2. Déployer `bench.sh` sur un client Debian.
3. Exécuter :
```bash
curl -s https://.../bench.sh | bash -s -- \
--server http://IP_BACKEND:8007/api/benchmark \
--token XXX \
--iperf-server 10.0.0.10
```
4. Vérifier côté backend (logs) quun benchmark a été créé.
5. Ouvrir le Dashboard :
- Device présent, scores visibles.
---
# 6. Données de test
Créer un répertoire `tests/data/` contenant :
- Exemples de payload JSON de bench :
- `bench_full.json` (tous tests)
- `bench_no_gpu.json`
- `bench_short.json`
- Scripts auxiliaires :
- `send_bench_payload.py` (envoi direct dun payload pour tests).
---
# 7. Automatisation CI (optionnel)
Intégration avec :
- GitHub Actions
- Gitea Actions / Drone / Woodpecker
Tâches CI typiques :
1. `pytest` sur le backend
2. Lancement dun backend en mode test
3. Envoi dun payload JSON factice
4. Vérification de la réponse HTTP
---
# 8. Critères de qualité
Lapplication sera considérée comme “OK” pour usage perso si :
- Au moins 1 test unitaire par endpoint critique
- Un scénario E2E réussi
- `bench.sh` fonctionne sur :
- 1 machine physique
- 1 VM
- Les erreurs dauth/token sont gérées proprement
- Le Dashboard reste utilisable avec plusieurs dizaines de devices et benchmarks
---
# 9. Améliorations possibles
- Ajout de tests de charge (Gatling / k6) sur le backend
- Ajout de tests de non-régression des scores (baseline)
- Ajout de tests visuels (Playwright, Cypress)
- Intégration dun badge “build/test status” dans le README principal