Outils d'automatisation de tests d'interfaces web
Définitions et objectifs
Constat
Un des premiers constat que l'on puisse faire lorsque l'on parle de test dans le monde du développement, c'est que majoritairement les développeurs savent qu'ils doivent mettre en places des campagnes de tests pour valider la qualité et le bon fonctionnement de leur code.
Cependant il s'avère que les tests de la partie "expérience utilisateur" au sein d'un client léger n'est que très rarement testée.
C'est donc très majoritairement des tests du Contrôleur (code) qui ont lieu et que très rarement des tests de la Vue (Interface Web).
Objectifs
Contrairement à ce que pourrait laisser penser le titre de ce site web "interface graphique", ce n'est en aucun cas des tests du rendu graphique que nous allons tester (couleurs, placements des éléments dans la page web, ...)
Ce que nous allons vouloir, c'est : "Simuler l'interraction de(s) l'utilisateur(s) au travers de tests fonctionnels".
En d'autres termes, nous allons vouloir vérifier que l'interraction de l'utilisateur avec l'interface web réponde bien au cahier des charges fonctionnels du projet dans lequel les tests sont mis en place. Nous allons également vouloir vérifier que le contenu des pages et les liens entre celles-ci soient cohérents
Les tests...
Définissons maintenant les différents aspects des "tests"
Automatisation de tests
L'automatisation des tests, c'est l'enregistrement et la lecture des tests.Exemples de logiciels : Selenium / CubicTest / Watir / AutoIT / Canoo / WebTest
Gestion des tests
La gestion des tests, c'est tout ce qui va permettre à l'équipe projet, développeurs et manager, d'avoir un retour sur les résultats d'exécutions des tests automatisés.Exemples de logiciels : Selenium / Outils borland / Salome / TestLink / Fitnesse / Outil HP / Twist
Tests de charge
Les tests de charge permettent de simuler l'utilisation simultanée de l'interface web par une multitude d'utilisateur.Exemples de logiciels : Grinder / OpenSta / JMeter
Model Checking
Qu'est ce que c'est ? Wikipédia dit : Vérification algorithmique d'un modèle donné, du système lui-même ou d'une abstraction du système, pour savoir si il satisfait une spécification, souvent formulée en termes de logique temporelle.Cet aspect n'étant pas traité dans ce site je vous invite à vous renseigner plus amplement en utilisant votre moteur de recherche préféré.
Exemples de logiciels : NModel / Smart testing / MaTeLo
Qui?
Qui est concerné par l'automatisation des tests d'interface web? Principalement deux profils.
Analystes programmeur
Les analystes programmeurs sont en charge d'assurer la conformité des développements par rapport aux besoins exprimés.Développeurs et équipes d'assurance qualité
Les développeurs et équipes d'assurance qualité sont en charge de valider le bon fonctionnement de l'application et le passage en production.Quand?
Deux condition sont nécessaires pour pouvoir mettre en des tests automatisés :
- Le test doit être joué plus d'une fois. En effet, il ni a aucun intérêt à automatiser un test qui ne sera exécuté qu'une seule fois. Dans ce cas là, la mise en place de tests est une perte de temps car elle prend plus de temps que les tests manuels.
- Le test peut être automatisé de bout en bout.
Comment?
La mise en place des tests dans un projet comprend 5 étapes :
- Lecture des besoins & spécifications. Il est indispensable de s'imprégner du context du projet pour savoir ce qu'il sera nécessaire de tester.
- Définition du périmètre de test. Dans cette étape, il faut définir ce qui sera pertinent de tester et ce qui ne l'est pas. Quelle sera la surface du projet recouverte par les tests.
- Rédaction des cas de tests. Maintenant, il faut rédiger en français le déroulement de tous les cas de test et des suites de tests. (Exemple : charger la page, vérifier la présence des 4 liens vers les sous parties du sites ainsi que la présence et la validité des informations affichées dans la page...). Cela peut être le travail du responsable du projet ou des responsables qualités etc...
- Enregistrement des tests dans l'outil. Maintenant il faut utiliser un outil pour enregistrer les tests. Cette tâche est du ressort des développeurs.
- Exécution des tests. La dernière étape est le lancement des tests qui ont été précedemment enregistrés. Cela peut être fait soit manuellement soit de manière automatique avec un outil ou un cron par exemple
Conséquences
Il existe un certain nombre de conséquences à la mise en place de tests automatisés :
- Les tests de non régressions peuvent être effectués beaucoup plus fréquemment et simplement. Il suffit de lancer le test qui a été automatisé pour savoir quel pourcentage des tests sont validés. Cette valeur ne doit pas diminuer d'un test de non regression sur l'autre.
- Le retour aux développeurs est beaucoup plus rapide pendant la phase de développement. Les tests indiquent quels éléments sont valides ou non et où se situent les problèmes.
- Les cas de tests possibles sont casiment "illimités".
- Il est possible de créer des rapports personnalisé pour obtenir un reporting personnalisé quand à la bonne exécution des suites de tests.
- L'automatisation des tests convient aux développements Agile et d'eXtreme Programming.
- La mise en place de ce processuss exige une documentation rigoureuse des cas de tests.
- L'automatisation des tests supprime les erreurs manuels.
Problèmatiques
La première problèmatique qui se pose est : Ce qu'il faut tester. En effet, nous pouvons envisager de tester différents types d'éléments dans la page comme pas exemple : Contenus, Liens , Fonctions, Eléments dynamiques, Ajax...
Les deuxième problèmatique est la façon d'obtenir les résultats
- Assert vs Verify Assert : effectue un test et bloque la suite de test si il échoue.
- AssertTextPresent vs AssertElementPresent vs AssertText Doit-on vérifier la présence d'un élément (ex : un label), ou bien son contenu (valeur du label)? C'est ce que ces trois fonctions entrainent la problèmatique : Quelle fonction choisir pour un même test?
Verify : effectue un test et ne bloque pas la suite de test si il échoue.
Assert empêche donc l'acquisition de statistiques sur tou les tests qui suivent en cas d'échec. Cependant Verify va permettre d'effectuer des tests consécutifs indépendants
La dernière problèmatique concerne la localisation des éléments à tester.
- Les éléments HTML sont localisable par leurs : ID, name attribute, Xpath statement, Document Object Model. Lequel choisir?
- Comment obtenir ces informations? En utilisant un add-on mozilla firefox par exemple "Findbugs". Sinon si le travail est en mode "test and code" alors il est évident que les ID des éléments seront définit avant le développement et que c'est le développeur qui devra s'assurer qu'il utilise les bons ID pour chaque élément.
- Comment localiser des objets dynamiques? (exemple : un formulaire qui n'apparait qu'après la selection d'un premier choix dans la page)
- L'attente des éléments (ex : AJAX) est très importante. Il faut penser à attendre l'arrivée des éléments dans la page avant de les tester sinon le test échouera obligatoirement.