Il faut bien le reconnaître peu de frameworks permettent de tester une IHM
développée avec SWT, bien entendu il existe des suites de tests proposées sous
licences commerciales comme GuiDancer ou Froglogic, mais le moins qu'on puisse
dire est que la communauté open source n'est pas très prolifique sur le sujet
(en tout cas à ma connaissance). Ayant remarqué le projet SwtBot lors de
l'Eclipse Conference 2008, j'ai testé ce framework, ce qui me donne une bonne
occasion pour écrire un nouveau billet.
Présentation
SWTBot est un framework de tests fonctionnels pour les interfaces graphiques
développées avec SWT/JFace. Il est distribué sous licence Apache à l'adresse
suivante http://swtbot.sourceforge.net/index.html, vous pourrez d'ailleurs
remarqué que la documentation n'est pas vraiment au niveau sur ce site, d'où
l'idée de vous évitez les déboires que j'ai pu rencontrer via ce billet. Au
niveau de la philosophie de ce framework, l'approche est semblable à JUnit
(notion de TestCase, redéfinition des méthodes setUp() et tearDown(), les
méthodes de tests se nomment testXXX) puisqu'il s'appuie sur ce Framework. De
nouvelles méthodes assertXXX() viennent enrichir celles spécifiques à JUnit et
sont notamment très utiles pour tester l'état des composants graphiques. Enfin
les composants graphiques SWT ont également été étendu pour pouvoir faire
quelques opérations de base sur ces derniers depuis nos tests, ainsi
SWTBotButton sera l'équivalant de l'objet graphique Button.
Installation du framework
Il est possible d'utiliser ce framework de manière autonome, toutefois comme
il est livré sous forme de plugin Eclipse, je recommande ce mode
d'installation. Attention il vous faudra une version 3.3 (Europa) au minimum.
Cette installation se fera via un site distant dont l'url est
http://swtbot.sourceforge.net/update-site (le mode opératoire
est rappelé dans ce précédent billet). Une fois le
plugin installé, il vous faut créer un projet Java dans lequel seront regroupés
vos tests (si vous choisissez de mettre vos tests dans le même projet que
l'application à tester, créez au moins un package ou un répertoire source
distinct pour les tests). Maintenant il vous faut ajouter les librairies
suivantes pour que vos tests puissent fonctionner :
- JUnit
- SWT (disponible dans les jars d'Eclipse ou en téléchargement sur http://www.eclipse.org/swt)
- net.sf.swtbot.finder_<version info>.jar (répertoire /plugins
d'eclipse)
- org.eclipse.core.commands_<version info>.jar (répertoire /plugins
d'eclipse)
- org.eclipse.equinox.common_<version info>.jar (répertoire /plugins
d'eclipse)
- org.eclipse.jface_<version info>.jar (répertoire /plugins
d'eclipse)
- org.eclipse.osgi_<version info>.jar (répertoire /plugins
d'eclipse)
- org.eclipse.ui.workbench_<version info>.jar (répertoire /plugins
d'eclipse)
- org.apache.commons.collections_<version info>.jar (répertoire
/plugins d'eclipse)
- org.apache.log4j_<version info>.jar (répertoire /plugins
d'eclipse)
Enfin il vous reste à configurer le logger log4J et ses appenders, cette
opération peut se faire via un fichier log4j.xml à placer à la racine des
packages (vous avez l'exemple fourni par SWTBot en pièce jointe)
Mise en oeuvre des tests
Comme les tests d'application SWT s'appliquent à deux cas pratiques :
une application autonome et un plugin Eclipse graphique, je propose de rédiger
un billet pour chacun de ces cas pour éviter redondance ou superposition
d'informations.
Mon sentiment à chaud
Déjà ce framework a le mérite d'exister, il représente du travail fourni
gracieusement, c'est donc toujours bon de le saluer. Je n'ai pas rencontré
d'autres frameworks OS répondants aux mêmes exigences, mais peut-être suis-je
passé à côté (si vous avez d'autres expériences, je suis preneur et les
commentaires sont faits pour ça) Dans leur organisation les tests ne
dérouteront pas les développeurs Java habitués des tests unitaires à la JUnit,
c'est pour moi également un avantage, d'autant qu'il sera possible de les
lancer via une tâche ANT ou de les intégrer dans un build Maven et donc dans
une démarche d'intégration continue.
Mes craintes viennent davantage de la difficulté à maintenir de tels tests ,
surtout sur des IHM complexes... les défaut de SWTBot seront les mêmes que ceux
de HttpUnit par exemple. On peut également noter le manque d'outillage pour par
exemple enregistrer un séquence d'interactions avec l'IHM, comme lorsqu'on
réalise une macro ou pour les suite de tests comme dans un outil comme
loadRunner... J'ai également quelques craintes sur la pérennité du projet qui
évolue peu depuis 8 mois et sur la faiblesse de la documentation, mais comme
indiqué sur le site de SWTBot : Looking for documentation that is not
here ? Consider contributing . Alors si vous êtes motivés , à vous de
jouer.