JSF et Test Driven Development /*+Facile*/

Bonjour,

Dans les 1,000 questions pour développer des applications web en Java auxquelles j’ai finalement réussi à répondre, il y a :

  • Comment tester des applications web sans y passer des heures ?
  • Comment développer des tests fonctionnels complets sans LoadRunner ou d’autres outils évolués ?
  • Comment développer des tests de charge qui ne soient pas trop simples et toujours sans LoadRunner ou d’autres outils évolués ?
  • Comment inter-agir avec des sites web de manière programmatique (cf une première tentative ici) ?
  • Comment appliquer le « Test Driven Development » aux développements JavaServer Faces ?

La réponse à toutes ces questions (à quelques bugs de JavaScript prêt pas encore très bien supporté mais qui ne devraient pas trop vous poser de problèmes avec les composants standards JSF ou ADF Faces) est HTMLUnit . HTMLUnit est un projet qui permet de tester des applications web de manière simple. Avant de développer vos applications JavaServer Faces, développez les tests de vos écrans web : en effet, dans une approche « Test Driven Development » (TDD), on développe les tests avant l’application. Pour développer des tests, il suffit de (1) télécharger la librairie Java HTMLUnit depuis la page correspondante et ajouter tous les fichiers .jar dans le CLASSPATH et (2) développer un programme qui simule un utilisateur qui utilise un navigateur web. Voici quelques exemples d’utilisation d’HTMLUnit ci-dessous :

  • WebClient wc = new WebClient(); permet de simuler un navigateur web et de stocker ce simulateur dans la variable « wc »
  • HtmlPage page = (HtmlPage) wc.getPage(« http://www.google.com »); permet d’ouvrir la page d’accueil de Google avec le navigateur web
  • String title = page.getTitleText(); met le titre de la page dans la variable « title »
  • HtmlForm form = page.getFormByName(« f »); met le formulaire HTML dont le nom est « f » dans la variable « form »
  • HtmlTextInput input = (HtmlTextInput)form.getInputByName(« q »); récupère le champ dont le nom est « q » et le met dans la variable « input »
  • input.setValueAttribute(« arkzoyd »); ajoute le texte « arkzoyd » dans le champ contenu dans la variable « input »
  • HtmlSubmitInput button = (HtmlSubmitInput) form.getInputByName(« btnG »); met le bouton « Submit » du formulaire « form » dans la variable « button »
  • HtmlPage page2 = (HtmlPage)button.click(); simule un clic sur le bouton « button » et récupère la page HTML correspondant dans la variable « page2 »

Vous pouvez récupérer un exemple complet sous la forme d’un projet JDeveloper ici. N’oubliez pas d’ajouter l’ensemble des librairies HTMLUnit dans les propriétés du projet avant d’exécuter le programme. Si vous avez un proxy HTTP sur votre réseau pour accéder à Google, il faut modifier l’appel du constructeur WebClient().

Par ailleurs, pour développer des tests plus complets ou gérérer de la charge, servez vous de :

  • L’API de journalisation (java.util.Logger) de Java SE
  • Le projet Apache Jakarta JMeter qui permet de générer de la charge avec des scénarios complexes si vous les développez sous forme de programmes Java comme celui qui précède

J’y retourne… Il y a encore 100,000 questions auxquelles il faut que je réponde (et ça c’est seulement pour celles que je me suis déjà posé)

-GarK!

2 réflexions sur “JSF et Test Driven Development /*+Facile*/”

  1. Well, I didn’t do it but it doesn’t surprised me a lot. I encountered a lot of issues with HtmlUnit when used with javascript that references the HTML components via the DOM API. It seems there are a lot of failing use cases in this area… Well I guess there’ll many challenges in TDD Web 2.0 Applications.

    I haven’t heard yet a lot about Automatic testing of Rich Internet Applications. I’ll be very interested to know how Oracle Development Team faces this challenge with its new ADF.Faces component set.

    You should ask Frank Nimphius (http://www.orablogs.com/fnimphius/), Duncan Mills (http://www.groundside.com/blog/DuncanMills.php) Jonas Jacobi (http://www.orablogs.com/jjacobi/) or Chris Schalk (http://www.jroller.com/page/cschalk)
    about your case or simply post it on JDeveloper’s OTN Forum (http://forums.oracle.com/forums/forum.jspa?forumID=83)

  2. James Violette

    Have you been able to test Oracle ADF autosubmit using HtmlUnit ?

    We have tried, but have not been successful. The selection occurs, but the pprChangeEvent does not seem to modify the HtmlPage.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *