« Tu peux retester cette fonctionnalité ? », « Tu peux faire des tests de non-régression sur cette fonctionnalité ? ». Voici des phrases que tout testeur a déjà entendu dans son quotidien. Mais retester, vérifier qu’il n’y a pas de régression sont des tâches souvent redondantes et pas les plus intéressantes.😵 Dans ce cas, pourquoi ne pas automatiser ces tests ?
Les tests automatisés : qu’est-ce que c’est ?
Le test automatisé est l’exécution, par un ou des outil(s) automatisé(s), d’un scénario de test prédéfini, se concluant par la comparaison des résultats attendus par l’outil avec les résultats obtenus.
Par définition, le test automatisé est implémenté dans une chaine d’intégration continue et selon la configuration de l’application testée. En conséquence, les scripts doivent être maintenus régulièrement en cas de modification sur une fonctionnalité utilisée par l’outil.
Dans un process habituel, les tests sont effectués après la phase de développement. Cependant, dans certaines méthodes de développement comme le TDD (Test Driven Development), les tests peuvent être développés d’abord, puis l’application ensuite.
Pourquoi est-ce intéressant d’automatiser ?
Nous allons maintenant nous poser la question du gain que peut produire l’automatisation des tests.
Cela peut paraitre logique, mais le test automatisé peut faire gagner un temps considérable sur les tests. En effet, lorsque qu’il y a un grand volume de données ou une grande quantité de manipulation a effectuer pour valider un test, l’automatisation permet de valider cela en quelques minutes quand cela peut prendre plusieurs heures (voire plusieurs jours) manuellement.
De plus, lorsque l’on a un grand volume de données, on doit échantillonner lors d’un test manuel. En effet, pour un fichier de plusieurs centaines voire milliers de lignes, impossible de tout vérifier manuellement. L’automatisation permet de couvrir l’entièreté du fichier en quelques minutes. Ceci permet donc d’améliorer la qualité d’une application, car un cas particulier qui aurait pu être oublié ou pas vu lors de l’échantillonnage serait automatiquement couvert par l’outil, et donc détecté.
L’automatisation permet également d’éviter des erreurs de manipulation. Un outil automatisé, par définition, reproduit toujours la même chose. Ce qui signifie qu’une fois l’outil testé et validé, les erreurs de manipulation ne sont plus possibles, contrairement à un test qui pourrait être fait manuellement. En effet, même lors d’un test bien maitrisé, il peut arriver qu’une erreur humaine intervienne dans le processus et fausse donc le résultat, ce qui est impossible avec un test automatisé.
Le bénéfice de ces tests automatisés est aussi humain. Cela permet de réduire une partie moins agréable du travail de testeur, qui peut être la redondance des tâches. En effet, tester toujours la même chose, pour vérifier qu’une fonctionnalité souvent modifiée fonctionne toujours correctement après une modification peut devenir lassant.
De même pour les tests de non-régression. Retester à chaque modification d’une fonctionnalité que tout le reste n’a pas été impacté par cette livraison et que tout fonctionne toujours correctement peut être très redondant et parfois démotivant pour le testeur. Automatiser ces tests permet donc d’éviter cette part du travail au testeur et de se concentrer simplement sur l’analyse du résultat (si tout est toujours validé ou si une régression est apparue).
Avantages et inconvénients
L’un des avantages de l’automatisation des tests est la customisation possible des outils. Si l’application demande une vérification ou une validation particulière, propre à son fonctionnement, il est possible de créer un outil personnalisé afin de procéder à cette validation.
Comme précisé plus haut, l’automatisation évite aussi la redondance des tâches peu agréables (retest à chaque modification ou tests de non-régression) Faire tester une fonctionnalité par un outil automatisé permet également de gagner du temps sur les tests. En effet, lorsqu’un outil de test automatisé est en train de tourner, il est possible de s’occuper d’une autre tâche que l’on a à faire et ne s’attarder que sur l’analyse des résultats.
De plus, l’outil permet une meilleure couverture de test, car un outil peut valider un grand volume de données ou un grand nombre d’action en un temps beaucoup plus court qu’une manipulation humaine.
En revanche, il ne faut pas négliger le temps de développement qui peut parfois être conséquent pour un outil personnalisé. D’autant que l’outil doit être spécifié, testé et validé avant d’être utilisé en condition d’utilisation finale.
L’un des inconvénients aussi de l’automatisation est la maintenance des outils ou des scripts créés pour les tests. En effet, si des composants de l’application sont concernés par une modification, les scripts et ou les outils devront être modifiés en conséquence afin d’être toujours utilisable. Ceci peut, selon les modifications, prendre pas mal de temps et doit être pris en compte dans le planning des testeurs.
Enfin, les tests automatisés ne permettent pas de tout tester. Si une nouvelle fonctionnalité est implémentée, elle doit d’abord être testée et validée manuellement. Et l’outil doit ensuite être créé/mis à jour afin de pouvoir tester cette fonctionnalité automatiquement dans le futur.
Comment faire pour automatiser ses tests ?
Il existe différentes façons d’automatiser des tests selon le domaine et le type d’application. Par exemple, on peut créer des scripts qui feront les validations requises à la place du testeur. Ces scripts peuvent réaliser tout type de tâche réalisées manuellement : valider des fichiers, exécuter des tâches, cliquer sur des boutons, vérifier des connexions, des comportements etc.
Il existe aussi tout type d’outil pour tester des tâches de front-end, notamment des outils qui permettent de reproduire des actions sur une page comme le ferai un testeur manuellement (Katalon, Codeception par exemple).
Il existe aussi des outils pour automatiser les tâches de back-end. Notamment des outils permettant de tester et valider des API (Postman pour le plus connu).
En conclusion, l’automatisation est un avantage non négligeable pour les testeurs. Gain de temps, de motivation, meilleures couverture et qualité des tests, c’est un moyen efficace de booster les performances des testeurs. Il ne faut bien évidemment pas négliger le temps nécessaire à la mise en place de cette stratégie et choisir les bons outils, adaptés aux besoins du projet. Mais si tout ceci est bien défini, bien construit dès le départ, l’avantage sera considérable.