Après avoir fouillé un peu pour voir ce qui se fait en matière de tests fonctionnels pour les applications Web, je suis tombé sur la combo qui tue :
- WWW::Mechanize pour scripter un surf
- HTTP::Recorder pour enregistrer un scénario en live au format WWW::Mechanize (via un proxy local)
- Mozilla::Mechanize pour jouer le script WWW::Mechanize en pilotant Mozilla (via xulrunner)
- Win32::IE::Mechanize pour faire de même avec IE en environnement Win32.
Il manquait à mon gout juste une chose : un wrapper qui vous permette d’écrire un scénario sans se soucier de l’agent à utiliser (WWW, Mozilla ou IE). En effet, ça serait vraiment dommage d’avoir à écrire autant de scénario qu’on a d’environnement à tester.
J’ai donc écrit un petit wrapper pour écrire une suite de test qui joue un scénario avec l’agent que l’on souhaite.
Globalement ça marche comme ça :
- on écrit le scéario qui nous plait dans un module qui hérite de Test::WWW::Mechanize::Runner dans des “suites”
package MonScenario; use Test::WWW::Mechanize::Runner; use base 'Test::WWW::Mechanize::Runner'; suite load_google => sub { my ($agent) = @_; ok($agent->get('http://www.google.fr'), 'GET http://www.google.fr'); }; - le fichier de test ne comprend que 3 lignes et ressemble à ça (pour un jeu avec Mozilla::Mechanize) :
use MonScenario; MonScenario->init('mozilla'); MonScenario->run();
Bientôt sur le CPAN…
PS : bon, il y a un soucis de compilation pour Mozilla::DOM (une dépendance de Mozilla::Mechanize) sur Debian (il cherche à utiliser le xpcom de mozilla alors que debian oblige à passer par xulrunner) ; le patch est simple, je compte le soumettre dans le BTS du CPAN je l’ai soumis sur le BTS du module, et si je trouve une demi-heure quelque part, à packager libmozilla-mechanize-perl.