Découvrez les tests E2E
Comme vous l’avez vu dans la première partie de ce cours, les tests End-to-End (ou E2E) sont souvent la dernière étape dans le processus de test d’une application. Les tests E2E vérifient l’intégralité d’une application, du début, par exemple l’arrivée sur la page d’accueil et la phase de connexion, jusqu’à la fin. Ils permettent de voir si l’application répond correctement.
Le but principal du test E2E est de tester l’expérience de l’utilisateur final en simulant un scénario réel de cas d’utilisation, de vérifier si le produit se comporte comme convenu, et de valider l’intégrité des données.
Mais pourquoi a-t-on besoin de les ajouter ? Les tests d’intégration ne sont-ils pas suffisants ?
Les tests d’intégration permettent, certes, de tester de nombreuses fonctionnalités d’une application, mais ils ne sont souvent pas suffisants pour tester complètement un projet. En effet, aujourd’hui, les applications sont des systèmes complexes qui sont interconnectés avec de nombreux sous-systèmes. Si l’un de ces sous-systèmes tombe en panne, c’est l’ensemble de l’application qui casse.
Mais quels peuvent être ces sous-systèmes ?
Ils peuvent être très nombreux ! Plus un projet est complexe, plus il peut comprendre de sous-systèmes. On peut, par exemple, penser :
Au système de caching, c’est-à-dire le système qui permet de ne pas avoir à requêter la base de données pour des données fréquemment demandées ;
Au système d’authentification, c’est-à-dire ce qui permet à l’utilisateur de créer un compte et de s’authentifier. Vous pouvez ici passer soit par des librairies, soit par des outils totalement automatisés tels qu’AWS Cognito.
Dans le cadre de notre projet Façadia, le sous-système le plus complexe qui est utilisé est l’API de WeatherCast. Pour le reste, ce projet est assez “simple” : il ne travaille pas avec un back-end ou avec d’autres API.
Enfin, les tests E2E peuvent être :
Soit manuels. Autrement dit, quelqu’un de l’équipe, le développeur ou le Product Manager, va tester à la main la fonctionnalité, et regarder que le reste du projet n’a pas été cassé. Dans ce type de cas, il va utiliser un cas de test ;
Soit automatiques. Autrement dit, le développeur va développer le test automatisé. En plus de faire passer le test sur la CI, il peut être intéressant de faire tourner ces tests à intervalles réguliers sur des serveurs ; par exemple, de rejouer les tests chaque heure, ou deux fois par jour. Cela permettra de rapidement voir si quelque chose ne marche pas comme prévu.
Élaborez votre cas de test
Vous souvenez-vous de la règle concernant la réalisation de tests ?
Euhhhh…
Avant de vous lancer dans la réalisation de tests, prenez toujours du recul par rapport à votre projet ! C’est vrai quand vous réalisez des tests unitaires, et des tests d’intégration. Mais c’est aussi vrai quand vous réalisez des tests E2E.
La bonne nouvelle, c’est que vous en avez vu, des cas de test, sans vraiment le savoir. Vous vous souvenez de cette issue , ou alors de celle-là ? Ces deux issues sont des cas de test. :)
Comme vous pouvez le constater, chaque cas de test est souvent composé :
D’une situation de départ (le Given). Cette situation permet de préciser d’où vous débutez ;
D’une action (le When). Cela peut-être une action réalisée par l’utilisateur, ou un paramètre passé à une fonction ;
D’un résultat (le Then), autrement dit comment doit se comporter l’application ou le code face à telle ou telle action.
Au final, un cas de test est très proche d’une User Story. À l’exception près que lors des tests manuels, vous allez noter les résultats sur une feuille, dans un tableur Excel ou G-Sheet.
Utilisez Nightwatch pour réaliser vos tests E2E
Si vous vous rappelez bien le chapitre précédent, nous utilisons la “testing-library” pour réaliser nos tests d’intégration via l’installation des dépendances @testing-library/dom
, @testing-library/jest-dom
et @testing-library/user-event
. À votre avis, comment allons-nous réaliser nos tests E2E ?
Euhhhh, via l’installation d’un module de test ?
Exact !
Pour réaliser des tests E2E automatisés, nous allons avoir besoin d’un framework de test E2E. Ici, nous utiliserons Nightwatch.
Changez à présent de branche et lancez la commande partie-4/chapitre-2-a : npm i
, pour installer les dépendances requises. Une fois que c’est fait, lancez la commande npm run testNightWatch
; elle vous permettra de lancer les tests E2E.
Aïe… ça ne marche pas sur mon navigateur !
Aïe ! :D
En effet, en fonction du navigateur que vous avez installé sur votre ordinateur, il est possible que Nightwatch plante lors de son exécution. J’ai configuré Nightwatch pour utiliser Mozilla Firefox par défaut. Or, il est possible que Mozilla Firefox ne soit pas installé sur votre ordinateur. Je vous invite à l’installer avant de continuer.
L’ensemble des tests est situé dans le répertoire nightwatch
situé à la racine du projet. Essayez de comprendre les tests et de voir ce qu’ils font. Dans la vidéo ci-dessous, je vais vous expliquer comment ces derniers sont réalisés.
Réalisez un test E2E sur NightWatch
Maintenant que vous avez vu comment réaliser des tests E2E, il est temps de mettre en pratique ! Pour cet exercice, vous pourrez vous mettre sur la branchepartie-4/chapitre-2-a
.
J’ai créé une issue spécialement dédiée à Nightwatch : issue1
Essayez de réaliser ce test E2E de votre côté avant de regarder le screencast ci-dessous.
Vous pouvez trouver la solution sur la branche partie-4/chapitre-2-a-solution
.:)
En résumé
Les tests E2E peuvent être réalisés soit par une personne, par exemple un Quality Assurance Engineer, un Quality Assurance Tester ou un Product Manager, soit de manière automatisée grâce à Nightwatch.
Nightwatch est un framework de test E2E. Il utilise directement les pilotes d’un navigateur, par exemple Chrome ou Firefox, pour réaliser les tests.
Quand vous lancez Nightwatch, votre navigateur s’ouvre automatiquement et réalise les tests.
Les tests E2E sont à réaliser en priorité grâce à un cas de test. Chaque test aura son propre cas de test.
Vous avez presque terminé ce cours. Vous savez maintenant comment réaliser des tests unitaires, d’intégration et même E2E. Il est maintenant temps de découvrir les autres types de tests possibles.