· Tech watch

Selenium, testez fonctionnellement vos applications web (partie 1/2)

Ce premier billet a pour objectif de présenter Selenium et ses fonctionnalités. Le second sera d’avantage axé sur son implémentation et utilisation.

Vous avez dit Selenium ?

Selenium est une suite d’outils permettant de faire des tests fonctionnels d’une application web (et uniquement web). Ces outils sont distribués par OpenQA, sous la licence libre Apache 2.0.

Par outil de test fonctionnel d’une application web, j’entends :

  • La capacité à simuler l’action d’un internaute avec prise en charge des actions réalisées avec le clavier et la souris (click, saisie d’un champ, sélection dans une liste déroulante, etc),
  • Les simulations sont bien sûr basées sur des cas de tests, basés eux-mêmes sur des cas d’utilisation,
  • La capacité à enregistrer ces simulations,
  • La capacité à exécuter ces simulations de façon automatisée de manière individuelle ou collective (on parlera alors de Test Suite).

Selenium est composé de 3 éléments :

  • Selenium Core : coeur de Selenium. Le core doit être installé sur le serveur sur lequel tourne votre application pour pouvoir les tester,
  • Selenium IDE : extension Firefox capable d’enregistrer et d’exécuter des tests et des Test Suites (via TestRunner, composant de l’IDE capable de jouer des Test Suite),
  • Selenium Remote Control :
  • * Serveur qui permet d’exécuter des tests sur différents navigateurs (firefox, internet explorer, opera, etc) et différents systèmes d’exploitation (MS Windows, GNU/Linux, Mac OS)
  • * Serveur qui permet d’exécuter des Test Suites sur ces différents navigateurs,
  • * Serveur qui permet d’exécuter des tests écrit dans des languages de script comme Ruby, Python, Java, .Net et Perl.

Contrairement à Selenium Core, Selenium RC et Selenium IDE s’installent sur le poste du développeur. Selenium RC peut aussi s’installer sur un serveur dédié à l’exécution des tests si l’on souhaite les exécuter de façon automatisée.

Petit aperçu d’un test enregistré dans Selenium IDE :

Le test consiste à :

  • ouvrir la page Google.fr,
  • Taper le mot clé « clever age »
  • Cliquer sur « Rechercher’
  • Cliquer sur le lien « Clever Age, conseil en architecture technique »
  • Sur le site de Clever Age, vérifier la présence du texte « systèmes informatiques flexibles »).

Avant d’aller plus loin, Selenium n’est pas fait pour :

  • Tester des applications non-web : client lourd, service web, etc.
  • Faire des tests de performance.

Et pour être totalement honnête, Selenium :

  • A quelques soucis avec les sites en Ajax ou avec beaucoup de JavaScript.
  • * Il convient alors de vérifier la qualité du code javascript développé.
  • * et si cela ne suffit pas et pour que le test se déroule correctement, il arrive de devoir entrer des commandes équivalentes à ce qui aurait du être fait en javascript (ouverture d’une page, saisie d’une valeur, etc)
  • Ne sait pas gérer plusieurs fenêtres d’un navigateur :
  • * Selenium sait ouvrir une pop-up,
  • * Selenium ne peut piloter deux fenêtres lancées indépendemment l’une de l’autre,
  • * En travaillant un peu le contenu du test enregistré et si la seconde fenêtre est ouverte depuis la première (cas d’une pop-up par exemple), alors il est possible de les contrôler simultanément.

Dois-je utiliser Selenium ?

Les utilisateurs de Selenium ont le profil suivant (liste non exhaustive) :

  • Analyste programmeur : pour vérifier que les développements sont conformes aux besoins exprimés
  • Développeur et équipe d’assurance qualité : pour valider le bon fonctionnement de l’application (non-regression, etc) et le passage en production.

Comment intégrer Selenium dans votre campagne de test ?

Sauf à vouloir perdre du temps, il convient de procéder de la façon suivante :
-# Lecture des besoins & spécifications,
-# Définition du périmètre de test,
-# Rédaction des cas de tests,
-# Enregistrement des tests dans Selenium,
-# Exécution des tests.

Ce test doit-il être un test Selenium ?

La réponse est oui, si :

  • le test doit être joué plus d’une fois,
  • le test peut être automatisé de bout en bout.

{{A quoi sert une {Test Suite ?}}}

Nous pouvons voir les Test Suites de deux façons :

  • Un ensemble de tests individuels que nous voulons jouer à chaque nouvelle version d’un projet. Chaque test correspond à un cas d’utilisation et permet de valider le bon fonctionnement de l’application dans son ensemble.
  • Un ensemble de composants qui seront utilisés pour construire un test.. Ces composants pourront être mutualisés entre les différents tests. Prenons un exemple : le test d’une application est souvent composé de trois étapes : connection à l’application, action à mener puis déconnexion de l’application. Je vais donc créer trois tests :
  • * Un test « connexion » : sa portée se limite à aller sur l’écran d’authentification de l’application, saisir les identifiants et se connecter.
  • * Un test « action » : le coeur du test, il contient la fonctionnalité à tester dans notre scénario
  • * Un test « déconnexion », consiste à cliquer sur le lien « Déconnexion » et vérifier que cela est bien le cas.

Petite illustration : imaginons que notre application porte sur la gestion des congés.

Dans le premier cas, ma Test Suite est composée de trois cas de test. Chaque test couvre l’ensemble du processus à tester.

Dans le second cas, chaque composant est une portion du process complet. Le « Test 1 » pourrait tout à fait être représenté par ce second cas.

Comment s’intègre Selenium dans un processus d’intégration continue ?

Il « suffit » de s’appuyer sur la capacité de Selenium à exporter les tests enregistrés dans Selenium IDE dans un des formats supportés par Selenium RC et adapté à votre outil d’intégration continue.

Une fois exporté et intégré à votre outil, lors d’un commit, une tâche est lancée qui consiste à :

  • Lancer une instance du serveur Selenium RC
  • Lancer votre test qui se connectera à l’instance du Selenium RC et jouera le test.
  • Récupérer le fichier de log produit par Selenium RC
  • Traiter le fichier de log.

Vous pourriez objecter qu’il est possible de lancer Selenium RC avec un test au format HTML. Certes mais dans la mesure où vous allez vouloir probablement réinitialiser votre application suite à votre test, vous serez contraint de passer par un langage de script.

Nous arrivons au terme de ce premier billet qui avait pour objectif de planter le décor sur Selenium, ses capacités et son fonctionnement. Le prochain billet consistera à rentrer dans le vif du sujet et montrer comment Selenium IDE et Selenium RC peuvent être utilisés.

16 commentaires

  1. Pour info, Quick Test Professional (alias QTP), édité par Mercury / HP, est un outil de test fonctionnel, que ça soit Web ou autres.
    La description d’un cas de test peut être réalisée par une « macro VBA » ou par une « description » via une interface graphique.
    Plus d’infos sur QTP: https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&cp=1-11-127-24%5E1352_4000_100__

    Au final, les rapports d’exécution peuvent être consolidés au niveau de Quality Center (autre outil Mercury HP) pour avoir une vision sur les bugs ou les régressions, au cours du cycle de développement.

  2. Nicolas Steinmetz

    Thomas,

    Pour avoir eu l’occasion d’assister à une démo des outils Mercury/HP, il est vrai que cette suite est impressionnante de part ses capacités. Son prix aussi d’ailleurs ;-)

    Selenium n’a certes pas la couverture fonctionnelle de QTP ou de la suite QC. Néanmoins, l’outil couvre les besoins de base en matière de test, a le mérite d’être aisé à prendre en main et pour un coût quasi nul (l’outil en soit est gratuit, il faut juste prévoir un temps d’appropriation).

    Bref, avant de se lancer dans QTP/QC ou Test Director (IBM), il est à mon humble avis judicieux/opportun de tester Selenium.

  3. Bonjour,

    Savez-vous si Selenium fonctionne bien pour tester BO ?
    Avez eu des retours d’expérience à ce sujet ?

    cdlt
    JM

  4. Nicolas Steinmetz

    Bonjour,

    Je n’ai pas eu l’occasion de le faire personnellement.

    J’aurais tendance à dire que dès lors que vous êtes en présence d’une application web et que la partie javascript est bien faite (ie, que Selenium est en mesure de capturer toutes vos actions dans lesquelles vous utilisez du javascript), vous devriez pouvoir l’utiliser avec Selenium.

    Il faut bien distinguer ce qui est propre à BO et ce qui a été développé autour de BO. Que BO soit utilisable avec Selenium n’implique pas que le développement réalisé autour de BO le soit.

    Nicolas

  5. Xavier Verne

    Pour avoir été confronté cette année à QTP, c’est un logiciel effectivement assez puissant dans la diversité des technologies qu’il est capable «d’automatiser», avec cependant quelques lacunes :

    1. Une politique de licence _très_ propriétaire : tout gratuit pendant 3 ans pour que les gens s’approprient les technos, pour un verrouillage ensuite.

    2. Instabilité du moteur d’exécution (redémarrage forcé tous les 50 tests car bugs autour de 100 tests sur les cas utilisés).

    3. Peu de flexibilité dans l’enchainement des tests, sauf à mettre en oeuvre la partie Business Process Testing, qui verrouille encore plus sur la solution.

    Bref, Selenium est effectivement plus un outil «agile» et QTP l’outil des «grosses DSI», en caricaturant un peu.

  6. Nicolas Steinmetz

    Xavier,

    Merci pour ce retour utilisateur et plus spécialement pour les points 2 et 3.

    Nicolas

  7. Bonjour,

    Savez-vous si Selenium peut fonctionner avec internet Explorer?

  8. Bonjour,

    Oui les tests sont exécutables sous IE via Selenium Remote Control (c’est écrit dans le billet).

    Il n’y a que IDE qui ne soit spécifique à Firefox car il s’agit d’une extension.

    Pierre

  9. Bonjour,
    Pourriez vous me dire si Selenium gère la partie Ajax d’un site ?(form, appel, etc)

  10. Bonjour,
    je trouve l’article très intéressant mais je ne comprend pas comment tu lances les tests. Plus particulièrement comment les tests se connectent à l’instane du Sélénium RC.
    Merci

  11. Comment récupérer le fichier de log produit par Selenium RC ?

  12. Bonjour,
    Est ce que selenium peut nous tester si le résultat d’une addition est correcte ou non par exemple?

  13. Bonjour à tous,
    Je viens de prendre en main Selenium dans le cadre de mes tests d’authentification (login, mot de passe) sur un site internet.
    A travers Selenium IDE pour un compte précis il n’y a pas de probleme. Cependant comment faire si j’ai 100 comptes ?
    Peut-on faire appel à un fichier exel par exemple pour que les 100 comptes soient testés automatiquement les uns à la suite des autres puis récupéré un rapport global ?

  14. Bonjour,

    Est ce quelqu’un aurrait il déjà installer Selenium et salome avec transition entre les 2 ?

    Merci d’avance

  15. Bonjour,

    Je dois tester mon intranet mais j’ai des popups de http authentification.
    quelqu’un a t-il une idée???
    Comment gérer ca par le selenium

    Merci.

  16. Bonjour,
    Je suis une débutante en Selenium. Et il y a quelque chose que je comprends pas:
    J’utilise Elgg
    Je crée 2 utilisateur, Jean et Marie.
    Le guid de jean est 23 et le guid de Marie est 24.
    Je teste les menus avec Selenium et dans Elgg, pour aller dans le profile de Jean, il faut passer par un menu qui a comme class = user-23.Je rejoue le test ( connecté en tant que Jean), Selenium ne renvoit aucune erreur. Mais quand je me connecte en tant que Marie, c’est le guid de Jean que Selenium garde bien sur.
    Ma question :
    Comment on devrait faire pour éviter ce problème de « dynamique » sous Selenium.
    MERCI BEAUCOUP

Les commentaires sont désormais fermés.