Outils de tests unitaires pour les applications web

Je m’intéresse ici aux frameworks Java de tests unitaires pour les applications web (côtés navigateur). Ils se basent souvent sur le framework Java de test unitaire JUnit. Ils peuvent en principe tester toutes les applications web quelque soit les technologies utilisées pour écrire ces applications web.

Il existe deux possibilités pour créer ces outils de tests. Soit fournir une API simulant un navigateur web, cette API utilisée dans le cadre de JUnit génère l’outil de test. La seconde possibilité est étendre JUnit. Ce framework est facilement extensible. Concrètement une classe peut hériter la classe TestCase. En fait on peut avoir des situations mixtes, où il existe une extension de la classe TestCase, mais où il possible d’utiliser seulement la classe TestCase et l’API de simulations du navigateur web.

Les framework trouvés sont :
httpUnit
htmlUnit
jWebUnit

HtmlUnit et httpUnit sont des API de simulation des navigateurs web. jWebUnit est une extension de JUnit mais peut être utilisée dans la première situation comme API de simulation de navigateur web avec JUnit.

Il existe sans doute d’autres projets similaires. J’ai ainsi trouvé le projet abandonné Jacobie, API de simulation d’Internet Explorer.

Après, on peut se pencher sur les outils de tests pour les applications Web se plaçant à niveau plus haut. Ils utilisent une syntaxe différente du langage java (fichier xml). Il peuvent faire des tests différents des tests unitaires comme les tests de charge.

Les outils trouvés sont :
WebTest (se basant sur htmlUnit)
OpenQA Selenium

HttpUnit

Outil libre(licence MIT, il s’agit d’une licence simpliste très courte de quelques lignes)
Dernière version 1.6.2 du 26/03/2006
projet démarré en 2000, 2 développeurs actifs ?
En fait le site sourceforge ne montre aucune activité au niveau du CVS.

Site web en anglais : http://httpunit.sourceforge.net/

Il s’agit d’une API de simulation d’un navigateur web pour un programme Java. Il est le projet le plus ancien. Il travaille plutôt au niveau des requêtes et des réponses http.
Le site manque de documentation sur le projet. Le forum est peu actif. La dernière version commence à dater.

htmlUnit

Outil libre(licence de type Apache)
Dernière version 1.12 du 10/08/2007
projet démarré en 2002, 8 développeurs actifs.
Site web en anglais : http://htmlunit.sourceforge.net/

Autres sites
Forum en anglais : http://www.nabble.com/HtmlUnit-f2597.html
Blog en anglais : http://mguillem.wordpress.com/
http://htmlunit.sourceforge.net/cgi-bin/browserVersion
script cgi pour créer des browseVersion dans htmlUnit. Instruction permettant de simuler un navigateur donné.

site de la société à l’origine de l’outil : http://www.gargoylesoftware.com
HtmlUnit est selon les explications du site officiel « un navigateur pour les programmes java ». Ce n’est pas au départ un outil de tests, mais un ensemble API de « bas niveau » de simulation des navigateurs web. On peut imaginer de nombreuses utilisations. Utilisé avec le Framework de test java JUnit, il devient un outil de test unitaire côtés présentation.

HtmlUnit a un support correct du JavaScript (dépendant de Rhino). Cependant le support n’est pas total pour les utilisations avancées (AJAX, GWT et librairie prototype), même si certaines simulations sont possibles.

HtmlUnit est utilisé par des outils de tests pour simuler les navigateurs web : JWebUnit, WebTest.

Le site du projet montre la qualité du développement : avec des métriques de code (JDepend Checkstyle), des tests unitaires. L’historique des versions est précise et indique clairement les modifications. Par contre la documentation manque un peu, il existe un des exemples simples mais il manque une documentation ou tutoriel complet.

Les statistiques de téléchargement sont relativement faibles (4702 téléchargements du binaire sur 5 mois).

HtmlUnit et HttpUnit sont assez similaires au niveau de l’objectif mais ont des implémentations différentes. HtmlUnit travaille plus au niveau de la page Html (classe HtmlPage) tandis que HttpUnit se place plus au niveau de la requête http (classe WebResponse). Une classe correspondant à la page Html n’existe pas dans le cas HttpUnit. A priori HtmlUnit est donc plus proche du comportement d’un navigateur web. Par contre, il est moins à l’aise avec des documents html mal écrits. Autre point assez secondaire, pour gérer les collections d’objets HttpUnit retourne souvent des tableaux d’objets tandis que HtmlUnit retourne des listes. Je préfère la seconde solution, plus propre même si en java il s’agit de listes d’objets et il faut connaître précisément le type d’objet utilisé.

jWebUnit

Outil libre (licence GPL)
Dernière version 1.4.1 du 05/05/2007
projet démarré en 2002, 1 développeur actif.

site web http://jwebunit.sourceforge.net/

JWebUnit est un outil de tests unitaires pour les applications web, côtés présentation. C’est une extension de JUnit.

Il s’agit d’une approche différente du htmlUnit plus proche d’un utilisateur web avec une API de plus haut niveau. L’exemple du test du site de Google montre que le code avec JWebUnit est deux fois plus concis qu’avec HtmlUnit.

L’architecture interne de JWebUnit montre que cet outil dépend HtmlUnit et de JUnit. JWebUnit utilise la possibilité « naturelle » d’extension de JUnit. Il étend la classe TestCase en fournissant une classe WebTestCase. JWebUnit fournit de nombreuses assertions supplémentaires adaptées au besoin des tests des applications web.

JWebUnit version stable (1.*) s’appuie sur HtmlUnit (version 1.11). Potentiellement, JWebUnit pourrait utiliser d’autres outils qu’HtmlUnit. C’est l’objectif de la version 2 de JWebUnit en cours de développement avec projet d’utilisation des outils HttpUnit, HtmlUnit Jacobie et Selenium RC (http://jwebunit.sourceforge.net/2.x/index.html). Pour l’instant, seule l’utilisation de selenium et de htmlUnit est possible. L’objectif de selenium est la possibilité d’exécuter le test directement dans un navigateur web.

Jacobie

Outil libre (licence GPL)
Dernière version 1.3 du 26/10/2005
projet démarré en 2005, abandonné en 2006.

Site web en anglais : http://jacobie.sourceforge.net/

Il s’agit d’une API Java pour utiliser Internet Explorer. Une application de cette API est la création de tests unitaires pour les applications web côtés présentation.
Le projet est abandonné depuis 2006. L’administrateur du projet conseille maintenant d’utiliser d’autres outils comme par exemple JWebUnit

Canoo WebTest

http://webtest.canoo.com/
conception complètement différente (automate de test pour les applications web)
utilise en interne HtmlUnitb (version 1.11)
4 développeur actifs, projet existant depuis 2001

OpenQA Selenium
Site Web
http://www.openqa.org/selenium/

Fiche outil httpUnit
1 Général
1.1 Nom du projet :
HttpUnit

1.2 Date création de la fiche
20/04/2008

1.3 Date de mise à jour de la fiche
20/04/2008

2 Présentation
2.1 site web
http://httpunit.sourceforge.net

2.2 objet du projet
outil de test des applications web

2.3 licence
Licence MIT (ou licence X11)

2.4 état du projet (actif/ inactif)
actif
remarque : ce projet est resté inactif plusieurs mois et semble reprendre

2.5 langage (et version)
Java version 1.4

2.6 numéro et date de la dernière version
version 1.6.2 du 26/03/2006

2.7 historique numéro et date de la première version connue
V 0.9 du 19/06/2000

3 Compilation du projet
3.1 résultat de la compilation à partir des sources de la dernière version
compilation ok
remarque l’archive source manque les jars mail.jar et activation.jar (Tomcat4.1)

3.2 type de gestionnaire des versions (CVS/SVN)
SVN
remarques :
commande à passer pour avoir la dernière version
svn checkout https://httpunit.svn.sourceforge.net/svnroot/httpunit/trunk/httpunit

3.3 résultat de la compilation à partir du gestionnaire des version
compilation ok
manque dans répertoire jars plusieurs archives

4 Tests unitaires
4.1 présence de test unitaire (oui / non)
Oui

4.2 framework de test unitaire (junit ou testNG version)
junit 3.8

4.3 résultat des tests unitaires
Non fait

4.4 couverture des unitaires avec Cobertura
Non fait

5 Application
Non fait

6 Notation avec la méthode QQOS
Non fait

2 Réponses to “Outils de tests unitaires pour les applications web”

  1. Orden Says:

    Je voulais automatiser les tests pour éviter les régressions.

    J’utilise HttpUnit car j’ai pas mal de javascripts qui ne passe jamais quand il est interprété par HtmlUnit. De plus quelquefois le HTML n’est pas toujours parfait.

    Je préfère écrire mes tests en Java, plus puissant et plus familier pour moi qu’un nouveau modèle XML.

    En plus je peut faire des choses pas standard mais très pratiques comme injecter des données de test en utilisant ma couche de persistance ou tester l’affichage d’un message en utilisant le même fichier de message localisé que celui de la page. Si une chose vous semble fastidieuse vous pouvez faire une méthode qui la simplifie.

    Pour toutes ses raisons je préfère HttpUnit même si c’est décrit comme moins avancé plus haut.

    Pour faire des test sans savoir programmer, JMeter vous permet d’enregistrer des scénarios et de les rejouer.

  2. 2anges Says:

    SAlut,

    est-ce que tu peux me conseiller un tutoriel pour utilise le webtest canoo.
    J’ai un peu du mal a comprendre sa structure et sa fonctionnalite pour un test remote.

    J’ai trouve ton article tres interessant, ca m’a clarifie certains aspects.

    Merci

Commentaires fermés


%d blogueurs aiment cette page :