4. Comment passer les tests et scénarios fonctionnels avec Sélenium

Lancer une suite test Selenium

Quand tous les tests et tous les scénarios sont créés, il est temps de “passer les tests”. Aucune difficulté à ce stade : il suffit de d’ouvrir les scénarios un par un puis de les exécuter et d’aller boire un café en attendant.

Avant de commencer

Vous devez disposer de :

  • un site / une application à tester ;-)
  • un jeu de test : quelques images, vidéos, sons, textes, données représentatives
  • Firefox 2.x VERSION PC (nous avons rencontré des problèmes sous Mac)
  • l’extention Selenium IDE
  • un accès à MySQL ou PHP MyAdmin (pas fondamental mais très pratique, vous verrez)
  • un ensemble de tests et de scénarios debuggés

Procéder par étape

selenium_10_scenario_1.png
selenium_10_scenario_2.png
Au début, nous restions collés à notre écran, paniqués à chaque problème (et il y en a des problèmes sur des campagnes de 900 tests). Nous stoppions le scénario, essayons de comprendre le problème… C’est exactement ce qu’il ne faut pas faire. Donc, un bon conseil, allez vraiment boire un café après avoir lancé les tests en mode “Fast”. Et là vous devez vous demander “Pourquoi en mode Fast ?”. Parce que c’est plus rapide ! Mais ca provoque aussi des problèmes… donc ce qu’il faut faire :

  • faire couler un café
  • lancer le premier scénario en “fast”
  • quand c’est fini lancer chaque test en échec en mode “slow” (miracle, la plupart “passent”)
  • analyser ceux qui posent vraiment problème (soit debugger le test, soit remonter l’anomalie dans votre bugtracker préféré)

Évidemment, nous en parlions au début, il faut lancer les scénarios dans un ordre logique :

  • création des utilisateurs,
  • paramétrage,
  • création des contenus,
  • validation,
  • publication,
  • listage,
  • affichage,
  • modification,
  • suppression.

Les dumps sont tes amis

Pour éviter de relancer à chaque fois tous les scénarios précédents (“création” et “validation” par exemple pour tester “publication”), une bonne pratique consiste à réaliser des dumps de la base à chaque fin de scénario. De cette manière on peut très facilement retester des bouts de scénario. C’est tout bête mais il fallait y penser !

En conclusion… Selenium n’est pas magique mais il est très utile

Les outils Selenium permettent d’aller très loin dans l’automatisation des tests. Mais pour couvrir les 20% de tests difficiles à paramétrer (présence d’Ajax, beaucoup de drag & drop…) cela coûte vite 80% de la charge de test. Il est donc nécessaire de savoir s’arrêter pour ne pas tomber dans le debugages… des tests ! A titre d’exemple lors de notre dernière campagne, nous avons réalisé 947 tests dont 858 tests Selenium 100% automatiques (90% des tests), 29 tests Sélenium semi-automatiques c’est à dire necessitant à un moment une intervention manuelle (3% des tests), 60 tests manuels (6% des tests). Nous avons perdu plusieurs dizaines d’heure de paramétrage inutile car trop complexe ou faisant peu sens.

Selenium force à tester chaque recoin de l’application de manière systématique et c’est une excellente raison de l’utiliser. Selenium est aussi un excellent outil pour traquer les régressions tout au long de la vie du site ou de l’application web (ou même tout au long du processus de recette). Cependant, il ne faut surtout pas partir du principe que parceque “ça passe dans Selenium alors tout va bien”. L’outil ne remplacera jamais l’utilisateur et une recette “intelligente” en complément des tests systématique est dans tous les cas indispensable.

Si vous avez des avis, compléments, bonnes pratiques, n’hésitez pas à les partager. Tout ce qui va dans le sens de la qualité web va dans le bon sens !

Pour en savoir plus, le site officiel :


Commentaires

Ne pas oublier qu’une commande, par exemple “click”, ne suffit pas toujours pour simuler une action dans son projet.
Un “click” peut comprendre des évènements de souris qui ne seront pas généré par Selenium; pensez a discuter avec les développeurs lors de la conception de scénario. “mouseDown”, “mouseUp”, etc. sont très utilise si le code de l’application utilise ce genre d’évènement de la souris qui pour un utilisateur correspond a un simple “click”.

Fast vs. Slow; le scénario doit (si aucune contrainte spécifique) toujours passé en mode “Fast”. Pensez a utiliser les commandes “waitFor*”, le scénario doit être fait en fonction de l’application et pas sur facteur vitesse d’exécution. Tester un “auto-complete” AJAX par exemple en mode Slow pour qu’il soit valide ne veut pas dire qu’un utilisateur ira plus vite que l’IDE en mode Slow et votre test ne sera pas concluant.
“waitForElementPresent” par exemple fera attendre l’IDE pour que l’élément spécifié soit chargé avant d’être cliqué.
La commande “pause” existe mais sous peux que le serveur soit plus lent, le délais spécifié sera peut-être passé avant que le contenu nécessaire ne soit chargé dans la page. Vous êtes donc repartit pour relancer votre test car le temps d’attente varie chaque fois que vous lancé votre test.

Comme dans tout, il faut de la rigueur. Même chose donc dans la manière de faire vos scénarios, pensez d’abord comment vous aller définir votre scénario avant de vous lancer dans la création de celui-ci. Discutez avec les développeurs (si vous ne faite pas partie de l’équipe de dev) pour savoir comment l’application est sensée se comportée sinon vos résultats de test peuvent être faussé même si ils sont “valide”!

Scal (non vérifié) le 09/07/2009

@ Scal = merci pour ces précisions. Tout a fait d’accord avec toi sur la simulation des actions qui doit être la plus proche possible de la réalité, y compris en ce qui concerne les temps de chargement, attente… Une idée pour un prochain article = une aide visuelle des actions réelles / commandes Selenium ?!

admin le 03/08/2009

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h3> <h4> <h5> <object> <param> <embed> <p>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Adds typographic refinements.
  • Potentially problem-causing HTML tags are filtered.