Test automatisé
Objectifs
- Connaître et différencier les types de tests
Cours
Test automatiséDevOps
Tester c'est douter
Pourquoi ?
Éviter les bugs et les régressions
Vérifier la sécurité et la performance
Valider les spécifications
Quand ?
Catégorisation des tests
https://www.softwaretestinghelp.com/types-of-software-testing/
(Non-)Fonctionnel
Test fonctionnel
Vérifie que le logiciel fait ce qu'il est censé faire selon les spécifications fonctionnelles
Exemples: unitaires, intégration, bout en bout
Test non-fonctionnel
Ne dépends pas des fonctionnalités du logiciel
Exemples: sécurité, performance
Types de tests
Tests unitaires
Tests d'intégration
Tests de bout en bout (E2E)
Tests d'acceptation
Tests de sécurité
Tests de performance
Tests unitaires
Vérifie un composant isolé (fonction, classe, etc.)
Besoin de mocks pour simuler les dépendances
Mock au niveau de la classe ou de la méthode
Frameworks : Mockito (Java), unittest.mock (Python), etc.
Frameworks : JUnit (Java), Jest (JS), unittest (Python), etc.
Tests d'intégration
Vérifie l'interaction entre plusieurs composants
Appel à un service externe de test (mock)
Mock au niveau du service et de sa réponse
Connection à une base de données de test
Pour Spring (Java), démarrage d'un contexte de test
Tests de bout en bout (end-to-end)
Vérifie le fonctionnement de l'application en entier du point de vue de l'utilisateur
Simulation depuis le navigateur: Selenium
Déploiement de l'application sur un environnement de test
Pyramide
Glace
Tests d'acceptation
Vérifie que le logiciel répond aux besoins du client
Scénarios de test
Déploiement de l'application sur un environnement accessible au client
Rapport de test
Proche du E2E mais orienté métier
Tests de sécurité
Vérifie que le logiciel n'est pas vulnérable aux attaques
Vérification des dépendances vulnérables : OWASP Dependency Check, GitHub Dependabot
Analyse du code source : SonarQube, GitLab SAST
Vérification des vulnérabilités connues sur un déploiement : OWASP ZAP
Tests de performance
Vérifie que le logiciel répond aux exigences de performance
Load (charge) : temps de réponse en fonction du nombre d'utilisateurs
Endurance : stabilité sur le long terme
Stress (surcharge) : stabilité en cas de surcharge
Scale : adaptation à une montée en charge
Déploiement sur un environnement dédié avec les même ressources que la production
Couverture de code
Mesure le pourcentage de code couvert par les tests
JaCoCo (Java), Coverage.py (Python), etc.
Couverture des lignes, conditions, fonctions, etc.
Fixer un objectif de couverture : p. ex. 80%
Bonne couverture ≠ bons tests
Random testing
Génération aléatoire de données de test
Vérification du résultat selon les spécifications
Seed pour pouvoir reproduire les tests en cas d'erreur
Test-driven development (TDD)
Écriture des tests avant le code
Ajouter un test
Lancer tous les tests et vérifier l'échec
Écrire le code
Lancer tous les tests et vérifier le succès
Refactor le code
Test-driven development (TDD)
https://commons.wikimedia.org/wiki/File:TDD_Global_Lifecycle.png
Tester ou ne pas tester, telle est la question
https://www.commitstrip.com/fr/2013/04/16/tester-ou-ne-pas-tester-telle-est-la-question/
Versions sans animation, plein écran, imprimable.
Références
- https://www.softwaretestinghelp.com/types-of-software-testing/
- https://www.atlassian.com/fr/continuous-delivery/software-testing
- https://blog-gestion-de-projet.com/test-automatises/
- https://openclassrooms.com/fr/courses/6100311-testez-votre-code-java-pour-realiser-des-applications-de-qualite/6440061-choisissez-les-bons-tests-automatises-avec-la-pyramide-de-tests