Automatisation des tests de régression

Cette page vise à donner un tour d’horizon de ce pan passionnant de la qualité logicielle, que nous avons à cœur de promouvoir à sa juste place. Un grand nombre de trésors, mais aussi d’embûches et d’impasses jalonnent le parcours de l’automatisation des tests : ayons-les en tête à tout moment !

 

Pourquoi automatiser les tests ?

L’automatisation des tests a maintenant une place importante dans les pratiques de test. Cependant, on n’automatise pas toujours pour les mêmes raisons. Il est utile de définir dans chaque contexte particulier le « Pourquoi » de l’automatisation.

Mais d’ailleurs, pourquoi teste-t-on tout court ?

Le pourquoi de l’automatisation des tests peut logiquement faire écho au pourquoi de votre démarche de test en général. Quel est votre but premier ? Réduire vos coûts en support ? Maintenir votre nombre d’utilisateurs ? Assurer un service accessible à tous ? Améliorer les notes que vous recevez sur Google Play ? Non, vous ne testerez pas pareil en fonction des objectifs que vous vous fixez. Et vous n’automatiserez pas pareil non plus !

Un boost d’efficacité

L’automatisation des tests porte une double promesse. D’un côté, on vise à réduire la durée des tests, et de l’autre on vise une plus large couverture. A durée égale, on teste davantage ; à périmètre égal, on teste plus rapidement.

En pratique, ces deux avantages sont visés conjointement.

Un boost de motivation

Le sentiment d’ennui de vos collaborateurs rejouant pour la 100ème fois la même campagne de tests de régression est à prendre au sérieux. C’est une composante avec laquelle vous devez compter au quotidien. Plus le sentiment d’ennui est fort :

  • Plus les tests sont longs à jouer, car les personnes traînent les pieds. C’est humain !
  • Plus les régressions passent inaperçues : le regard est émoussé, difficile de tester comme si c’était la première fois.
  • Plus le niveau de motivation général est impacté, ce qui peut faire tache d’huile sur d’autres projets.

L’automatisation des tests n’est donc pas seulement utile pour assurer la qualité des logiciels. C’est également une manière de soulager les personnes mobilisées sur des tests répétitifs et fastidieux, et d’améliorer leur qualité de vie au travail.

Avantages collatéraux

L’automatisation des tests apporte des gains auxquels on ne pense pas forcément au moment où on initie cette démarche. Il est cependant intéressant de les avoir en tête pour favoriser leurs effets positifs !

Une documentation vivante

Un bel avantage auquel on pense trop peu souvent : les tests automatisés sont une documentation à part entière ! Ils permettent d’attester qu’il y a 6 mois, tel élément discret était attendu à tel moment sur telle page. Si cette approche vous parle, alors la démarche BDD vous séduira encore plus.

Une transparence accrue

Le World Quality Report de 2020 indique également que 63 % des entreprises interrogées trouvent que l’automatisation rend les activités de test plus transparentes. En effet, une plateforme partagée permettant à tous la consultation des résultats des tests automatisés apporte de la confiance dans le produit et est susceptible de générer d’intéressants échanges entre parties prenantes.

De nouvelles occasions de trouver des bugs

Quand on automatise les tests, on porte un regard un peu différent sur l’application à tester. On ne passe pas forcément par le même chemin qu’en temps normal, on ne fouine pas aux mêmes endroits. Résultat : pendant qu’on écrit les scripts, on trouve de nouveaux bugs !

Quels tests faut-il automatiser ?

Pour répondre à cette question, il faut s’en poser plusieurs autres :

  • Quels scénarios de test sont indispensables pour se faire une idée de la qualité de l’applicatif ?
  • Quels scénarios nous prennent le plus de temps ?
  • Quels scénarios sont automatisables ? Ou, pour éviter un débat peu fructueux, quels scénarios sont automatisables au prix d’un effort pouvant être rentabilisé ?
  • Quels tests nous seraient utiles et ne peuvent être joués qu’automatiquement ? (Hé oui, il y en a ! Pensez aux tests de charge, aux outils de qualimétrie, aux scans de vulnérabilité…)

Les tests fonctionnels aussi bien que les tests non-fonctionnels peuvent donner lieu à des tests automatisés.

Quand faut-il automatiser les tests ?

Cette question de la temporalité est prise en tenaille entre deux risques :

Automatiser trop tard

C’est le risque le plus grave. Automatiser à un stade avancé du projet réduit le nombre de fois que les tests automatisés seront exécutés. On perd du coup une partie de leur ROI. La plupart du temps, le but du jeu, c’est d’automatiser suffisamment tôt pour augmenter le nombre de leurs exécutions !

Attention toutefois : certains tests seront rentabilisés dès leur première exécution (pensons par exemple à des scripts utilisant des dizaines ou des centaines de jeux de données différents). La question de la récurrence de l’exécution est une heuristique intéressante, mais ce n’est pas la seule.

Automatiser des tests sur une application trop instable

Ce risque peut être modéré par l’architecture du projet de test. L’utilisation du design pattern du Page Object Model par exemple permet d’avoir des tests automatisés robustes et faciles à maintenir, même si l’application à tester subit d’importants changements d’interface.

Qui doit automatiser les tests ?

Une question qui en cache d’autres

Cette question est importante mais a tendance à faire de l’ombre à d’autres questions tout aussi importantes (hé oui, encore une question en forme de poupée russe !) :

  • Qui va bénéficier de l’automatisation des tests ?
  • Qui va lancer les campagnes de tests automatisés ?
  • Qui va analyser les résultats?
  • Qui va lire les reportings?

En négligeant ces questions, on risque d’initier un projet sous-terrain… et qui le restera. Il est important de réfléchir à l’écosystème social que vous voulez tisser autour des tests automatisés.

Les tests automatisés peuvent être écrits par l’équipe de test interne, ou être externalisés. Dans le dernier cas, pensez à long terme : qui va maintenir les tests automatisés ? Un contrat de tierce recette applicative (TRA) peut avantageusement encadrer une collaboration à long terme ; vous pouvez également envisager de maintenir les tests en interne et de solliciter une formation pour ce faire auprès de votre prestataire.

Les tests automatisés : un problème de testeur ou de développeur ?

Cette question revient à se demander : vaut-il mieux un bon qualiticien avec une belle base technique, ou un bon développeur avec une grosse affinité QA ?

En termes de technique, il est évidemment préférable que la personne soit autonome : l’automatisation des tests promet quelques challenges. En revanche, pas la peine d’être un développeur senior pour mettre en place un projet de test automatisé, les frameworks sont en général tout à fait accessibles à des personnes ayant un niveau basique ou intermédiaire en développement. Il existe même des outils codeless ; attention cependant à veiller à ce qu’ils puissent répondre à tous les besoins, car par design il ne sera pas possible d’implémenter soi-même les solutions voulues.

L’automatisation, c’est seulement pour les projets en mode agile ?

L’automatisation des tests est une pratique qui s’est imposée dans tous types de projets et a fait ses preuves dans un grand nombre de contextes. Il est parfaitement judicieux d’envisager l’automatisation au sein d’un projet agile (notamment en contexte Scrum), de même qu’au sein de projets utilisant d’autres méthodologies. Les modalités ne seront pas forcément les mêmes, mais comme on l’a vu, quel que soit le type de projet, on ne se lance pas tête baissée dans l’automatisation !

Les outils de tests automatisés

Ces outils sont à ce jour très nombreux. L’objectif ici est de faire un rapide tour d’horizon des outils à maîtriser, soit parce qu’ils sont incontournables, soit parce qu’ils proposent un service rare.

Les outils de test fonctionnel dynamique

Selenium et ses frameworks associés

Selenium existe depuis 2004. L'année 2016 nous a apporté Selenium 3, l'année 2019 Selenium 4 (et ses Relative Locators !), et le rythme promet de rester soutenu. Dans la famille des frameworks de tests automatisés, Selenium est un des grands piliers. Nombreux sont les autres frameworks qui se basent dessus ; Protractor en est un exemple.

Une des particularités géniales de Selenium est que ce framework est disponible dans un grand nombre de langages. Le plus utilisé est certainement Java, mais les sites de questions/réponses (comme StackOverflow) sont représentatifs de la diversité des langages.

Selenium est l'outil par excellence permettant d'automatiser des tests fonctionnels sur interface web. Pour les applications lourdes, d'autres outils existent.

UFT : le leader pour les applications lourdes

Pour mettre en place des tests automatisés sur des applications lourdes, l'outil le plus connu et certainement le plus utilisé est Unified Functional Testing (UFT). Au passage, il permet bien sûr également d’automatiser des tests web (au fond, un navigateur est une application lourde !)

Cet outil très complet a fait ses preuves, mais il présente l'inconvénient d'être relativement onéreux.

Pywinauto : une alternative gratuite et open-source

Pywinauto est un outil open-source permettant d'automatiser des tests d'applications lourdes sans aucun coût de licence.

Katalon, l’étoile montante des tests mobiles

… Ou plutôt l’étoile montée, tant son ascension a déjà bien marqué le paysage de l’automatisation des tests ! Katalon est un outil d’automatisation des tests qui cible à la fois les applications web et les applications mobiles. Pratique d’utilisation, il peut être pris en main en ayant très peu de connaissance en programmation.

Et tant d’autres....

En bref, la plupart des applications peuvent donner lieu à des tests fonctionnels automatisés, que ce soient des applications web, mobiles, lourdes, des systèmes bancaires ou même… des télévisions numériques. Simplement, pensez bien à votre besoin avant de choisir l’outil. Vous avez déjà entendu ce conseil mille fois, mais il n’en est pas moins vrai !

Les tests d’API, rapides et fiables

Les tests d’API sont plus rapides à exécuter que des tests automatisés d’UI. Ils forment donc un socle avantageux et permettent d’assurer un premier niveau de qualité. SOAPUI, ainsi que Postman, sont des outils ayant fait leurs preuves en la matière.

Les outils de tests non fonctionnels

Tests de performance et de charge

Attention, les tests de performance et les tests de charge ce n’est pas la même chose ! En revanche, force est de constater que les outils utilisés pour réaliser ces deux types de test sont souvent les mêmes. C’est le cas par exemple de JMeter, ou encore de Gatling.

Tests de sécurité

Certains tests de sécurité peuvent être automatisés. C'est le cas, par nature, des scans de vulnérabilité. Leur efficacité ne vous garantit pas une couverture de tous les risques de sécurité (les pentests « manuels » restent indispensables), mais ils ont l’avantage de pouvoir être utilisés par tous, que l’on ait ou non une expertise en sécurité.

Qualimétrie

La qualité de code peut être évaluée grâce à des scans automatisés. SonarQube est certainement l’outil le plus connu et le plus utilisé dans cette optique. Il permet de définir des règles qui peuvent ensuite être diffusées en direct dans l’IDE des développeurs via un linter nommé SonarLint. Il est possible également de diffuser les commentaires de SonarQube sur Gitlab, ce qui permet de donner une plus forte visibilité aux scans.

Bonnes pratiques de tests automatisés

Les bonnes pratiques de tests automatisés sont pour la plupart "agnostiques" en termes d'outil. Enfin, sauf si on considère qu’un cerveau bien vitaminé est un outil !

Avoir une stratégie claire

Les tests automatisés font parfois l’objet d’attentes démesurées. Prenez d’abord bien conscience de ce qu’implique un projet d’automatisation des tests. C’est un investissement sur la durée qui a de bonne chances de s’avérer profitable, à condition de bien garder à l’esprit :

  • la nécessité d’une stratégie ad hoc: on n’automatise jamais tout, le choix des scénarios à automatiser est de la plus haute importance.
  • l’importance d’une bonne conception, gage de coûts de maintenance maîtrisés.
  • les coûts inévitables (bien que modérés) d’analyse des résultats et de maintenance.

Prenez également le temps d’étudier la représentation que chacun se fait des tests automatisés. Cela s’avèrera utile notamment pour aligner les attentes de chacun.

Assurer la clarté des logs

La qualité des logs est un point trop souvent négligé. Pensez dès le début aux logs que vous souhaitez lire au quotidien, car c’est ce qui va se passer ! Un projet d’automatisation, comme tout projet de développement, c’est d’abord beaucoup d’écriture… puis beaucoup de lecture de code et de logs.

En bref, soigner ses logs, c’est préparer de bonnes journées à son « moi futur » !

Le plus beau cadeau que vous puissiez offrir à vos équipes (et à vous-mêmes), c’est des logs en langage naturel. Pourquoi ? Parce que tout le monde les comprend, que ça permet de reproduire facilement une anomalie, et que ça fait gagner un temps fou en maintenance. Cela peut être mis en place très simplement par exemple avec Selenium.

Mettre en place une veille technologique

Le domaine de l’automatisation des tests étant en constante évolution, une veille soutenue et exigeante sur ces technologies est nécessaire pour être au courant des dernières innovations. Une astuce simple pour un premier niveau d’information : surveiller les derniers cours qui paraissent sur Test Automation University ! Ce site, paru en 2019, est une mine d’or. Il permet de se former gratuitement à un très large panel d’outils de test. Un nouveau cours paraît environ chaque semaine, ce qui est une véritable prouesse.

 


Vous voulez rester au courant des dernières nouveautés du monde de l'automatisation des tests ? Découvrez également notre blog !

A bientôt !