Posts in fluentlenium

BreizhCamp 2013

left-small

Pour ceux qui l'aurait loupé, le BreizhCamp dans sa version 2013 a actuellement lieu.

Etant un grand amoureux de la Bretagne, je ne pouvais manquer le cru de cette année…

En outre, j'ai eu la chance d'y présenter un Tools In Action d'½ heure sur le sujet des tests d'acceptance et plus précisément sur la façon dont il est possible d'intégrer Cucumber JVM, Selenium et FluentLenium.

Les slides sont dès à présent disponibles :

Et un projet d'exemple est accessible ici.

A noter que cette présentation concorde parfaitement avec la version de FluentLenium dans sa version 9.0 (comme par hasard! ;–) ).

Enjoy! ;–)

PS : en plus, pour une fois, il ne pleut pas… ;–)

in breizhcamp, fluentlenium, intégration continue, présentation, selenium

Industrialiser La Récolte De Métriques Web

left-small

A l'origine, une des principales raisons à la mise en place d'un serveur d'intégration continue était l'automatisation des processus qui, fait manuellement, étaient souvent consommateur de temps et générateur d'erreurs humaines. Petit à petit, ce dernier s'est imposé comme l'orchestrateur de tous les processus et est devenu un des points central de l'usine de développement. En effet, en plus de ses capacités à compiler, packager, faire passer les tests unitaires, d'intégration et d'acceptance, il est souvent utilisé pour livrer mais également pour effectuer des tests de non régression.

Parmi ces tests de non regression, il est possible d'y inclure (en plus des classiques tests unitaires, d'intégration et d'acceptances) les tests de performances (JMeter, Gatling, Clif) et la remontée de métriques de qualité de code (PMD/CPD, Findbugs, Checkstyle, ou plus simplement Sonar).

Bien évidemment, récupérer des métriques sans les consolider ni les comparer avec l'historique est totalement inutile car cela n'offrirait aucune visibilité sur l'amélioration ou la dégradation du produit.

Ce petit laïus semble trivial pour ceux qui font du Java (enfin je l'espère… ;–) ). Cependant il l'est un peu moins dans le monde pur web (ie. lorsque l'on veut tester une couche pur front). Bien sûr, il y a Selenium & co mais cela ne permet de ne tester que le fonctionnel. En outre, en cherchant dans la littérature (pour rappel, je ne suis pas développeur front), on peut constater que, souvent, les outils utilisés pour obtenir des métriques sur la qualité de rendu d'une page ou le temps de chargement de ses différents composants sont souvent intégrés au navigateur du développeur et que, souvent, il est nécessaire de se faire des nœuds au cerveau pour les intégrer aux usines logicielles telles que celles dont l'écosystème Java a l'habitude.

Vous l'aurez compris, cet article a donc pour objectif de montrer comment il est possible d'intégrer tout ce beau monde…

Il se limitera cependant à la récupération de métriques sur la qualité de rendu d'une page ainsi qu'à son temps de chargement.

Dans un premier temps, cet article présentera donc comment il est possible de récupérer des métriques type YSlow ou Pagespeed (ie. une note globale sur la page) puis, dans un second temps, comment il est possible de récupérer des métriques sur le temps de chargement des pages. Enfin, pour faire le liant avec mes articles précédent, on verra comment il est possible de remonter et historiser ces métriques au travers un test d'acceptance.

Evidemment, l'objectif n'étant pas d'obtenir ces métriques de manière “one shot”, une attention particulière sera portée sur l'intégration de ces outils à une usine logicielle et à leurs capacités à fournir une évolution dans le temps.

in fluentlenium, intégration continue, java, selenium Read on →

FluentLenium Et Cucumber JVM... Complément Et Precision

left-small

Dans mon article précédent, j'avais tenté d'expliquer comment il était possible d'intégrer les frameworks Cucumber JVM et Selenium au travers de FluentLenium.

En effet, pour rappel, FluentLenium permettait d'abstraire Selenium en lui offrant une API plus fluent mais également en lui apportant nativement ce qu'il préconise, à savoir le Page Object Design Pattern.

Pour ce faire, j'avais proposé d'utiliser la délégation de l'initialisation de FluentLenium à une classe tierce injectée via le mécanisme d'injection de Cucumber JVM.

Cependant, suite à discussion avec la créatrice de FluentLenium (à savoir Mathilde), on s'est rendu compte que l'axe utilisé était légèrement biaisé (même s'il fonctionnait…).

Cet article revient donc sur ce point en proposant une solution plus simple mais présentera également comment il est possible de tester le scénario Cucumber avec différents navigateurs et il y aura un petit mot sur l'utilisation de navigateurs déportés (via les RemoteWebDriver de Selenium 2).

Pour ce faire, il sera découpé en 3 parties qui couvriront des usecases différents se traduisant donc par des implémentations différentes :

  • cas de tests pour un site simple,
  • cas de tests pour un site complet,
  • cas de tests multi-navigateurs pour un site complet.

A noter que je ne reviendrai pas sur les principes des différents frameworks/concepts mais juste sur comment il est possible d'implémenter ces différents usecases.

A noter également que l'article précédent aurait pu être modifié mais qu'en raison du nombre important de changements, il était plus simple d'en initier un autre…

in fluentlenium, intégration continue, java, maven, selenium Read on →

FluentLenium Et Cucumber JVM Sont Sur Un Bateau...

left-small

Dans un article précédent, j'avais abordé comment il était possible de démarrer une application web dans un conteneur de Servlet de manière embedded au sein de la phase integration de Maven. Bien sûr, cela n'a pas été fait que pour l'exercice de style et il y avait une petite idée derrière : pouvoir exécuter des tests d'acceptance en mode boite noire sur l'application.

Pour faire les tests d'acceptance, le choix de Cucumber JVM a été fait afin de permettre l'expression de tests d'acceptance avec une sémantique utilisant le pattern Given/When/Then mais également afin de permettre à des non développeurs de comprendre/écrire les scénarii de test à exécuter.

L'application à tester étant une application web, un besoin s'est fait sentir de tester la partie rendue. Dans cet article, lorsque l'on parlera de tester la partie rendue, il sera question de vérifier que l'élément recherché se trouve bien dans le document html remonté dans le navigateur web. Pour rappel (cf. le paragraphe Contexte de ce post), l'application testée s'appuie sur un framework web java de type Struts2.

Aussi, il ne sera pas question, ici, de tester le rendu dans différents navigateurs.

Il a été décidé de partir sur une solution s'appuyant sur un runtime à base de Selenium : en effet, un besoin latent étant, à terme, de tester le rendu de l'application web sur les différents navigateurs, cette solution semblait correspondre le mieux aux besoins.

Bref, passons ce besoin pour revenir à notre objectif premier, à savoir, vérifier la présence des éléments dans l'arbre DOM remonté par l'application web.

Pour résumer, il a été décidé de partir sur :

  • Cucumber JVM pour la partie représentation/écriture des scénarii,
  • Selenium pour la partie exécution des tests.

Cependant, la syntaxe sur la partie WebDriver de Selenium 2 étant assez verbeuse, il a été décidé d'utiliser le framework FluentLenium qui offre une API plus simple et plus naturelle (enfin plus fluent quoi! ;–) ). En outre, en plus d'une API plus facile d'utilisation, la notion native de Page de FluentLenium poussant à mieux découpler la représentation d'une page et son test, cela a joué en sa faveur ;–)

Ainsi, cet article présentera comment il a été possible d'intégrer Cucumber JVM avec FluentLenium afin de pouvoir faire tourner des tests avec Selenium.

A noter que je ne m'attarderai pas, dans cet article, à présenter exhaustivement les différents protagonistes mais seulement les quelques points qu'il est nécessaires de connaitre afin d'intégrer ensemble ces différents framework.

[update] Suite à discussion avec la créatrice de FluentLenium, un autre article a été initié et apporte de nombreux compléments mais également correction à cet article. Pour en savoir, plus, rendez vous ici

in fluentlenium, intégration continue, java, maven, selenium Read on →