Files
serv_benchmark/docs/09_tests_qualite.md
2025-12-20 03:47:10 +01:00

6.4 KiB
Executable File
Raw Permalink Blame History

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 :

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 :

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 :
curl -s https://.../bench.sh | bash -s -- \
  --server http://IP_BACKEND:8007/api/benchmark \
  --token XXX \
  --iperf-server 10.0.0.10
  1. Vérifier côté backend (logs) quun benchmark a été créé.
  2. 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