Définition
Webinject est un logiciel libre permettant d’automatiser des tests d’applications Web. Les tests peuvent être effectués sous forme de scénario afin de simuler un visiteur. WebInject affiche les résultats en temps réels et peut également être utilisé pour surveiller les temps de réponse.
WebInject est écrit en Perl et peut fonctionner sur toute plate-forme ayant un interpréteur Perl (MS Windows, GNU / Linux, BSD, Solaris, Mac OS, et bien d’autres).
WebInject peut être utilisé par Nagios. Pour la mesure des performances, mon pote Thibaut à fait un Graph Template pour Cacti que je fournirais dans un prochain billet.
Autres informations :
Site du projet : http://www.webinject.org/
La dernière version du projet date du 4 janvier 2006.
Le projet Webinject a été repris par Sven Nierlein. Il a converti les sources en module Perl et apporté des améliorations voir le changelog : http://cpansearch.perl.org/src/NIERLEIN/Webinject-1.62/Changes
Clin d’œil : Regardez le changelog à la version 1.57
Téléchargement :
Version officiel : http://www.webinject.org/download.html
Version de Sven Nierlein : http://search.cpan.org/~nierlein/Webinject-1.62/
Dans ce document, nous allons utiliser la version CPAN.
Installation :
Qui dit cpan, dit téléchargement et installation via la commande cpan.
#cpan
>install Webinject
>quit
Attention à la majuscule.
Emplacement de Webinject :
Installing /usr/lib/perl5/site_perl/5.8.8/Webinject.pm à librairie Perl de Webinject
Installing /usr/share/man/man3/Webinject.3pm à Documentation
Installing /usr/bin/webinject.pl à script Perl (Executable)
Utilisation
Webinject s’exécute de cette manière :
webinject.pl -c config.xml testcases.xml
“config.xml” est le fichier de configuration de Webinject. Dans ce fichier, nous pouvons modifier le comportement de Webinject.
Pour notre exemple, nous allons utiliser ce fichier config.xml :
<timeout>5</timeout>
<globaltimeout>10</globaltimeout>
<reporttype>standard</reporttype>
Ici, chaque test effectué par webinject ne doit pas dépasser 5s, l’ensemble des tests ne doit pas excéder 10s et la sortie de Webinject sera de type standard.
Pour plus d’infos, consultez cette documentation : http://www.webinject.org/manual.html#cfgfile
Le deuxième fichier xml , testcases.xml, va nous permettre d’effectuer nos propres scénarios de test. Dans notre exemple, nous voulons nous connecter à l’application WEB pour vérifier que le site est actif, puis nous connecter avec un nom d’utilisateur et ainsi vérifier l’état de la base de données, enfin, nous déconnecter pour ne pas polluer notre site avec des sessions inutiles.
Voici notre fichier testcases.xml :
<MONAPPLI repeat="1">
<case
id="1"
description1="Connexion a mon application WEB"
method="get"
url="http://application.domaine.fr/login"
verifypositive="Bienvenue sur mon application"
errormessage="Impossible de se connecter "
/>
<case
id="2"
description1="Identification"
method="post"
url="http://application.domaine.fr/login"
postbody="back_url=http://redmine.domaine.fr/ &username=olivier&password=monmotdepasse"
verifynegative="Identifiant ou mot de passe invalide."
errormessage="Impossible de s authentifier a mon application avec le compte olivier"
/>
<case
id="3"
description1="Deconnexion de mon application"
method="get"
url="http://application.domaine.fr/logout"
errormessage="Impossible de se deconnecter"
/>
</MONAPPLI>
Explication :
<MONAPPLI repeat="1"> –> Début des test. On repète le test qu’une seule fois.
</MONAPPLI> –> Fin de test.
Case 1 :
Si la chaine « Bienvenue sur mon application » apparaît dans le code source de la page http://application.domaine.fr/login , l’application fonctionne. Sinon, on génère un message d’erreur « Impossible de se connecter ».
Case 2 :
On essaie de se connecter à l’application avec le nom d’utilisateur « olivier » et le mot de passe « monmotdepasse » à l’url http://redmine.domaine.fr/ en mode POST
Si la chaine « Identifiant ou mot de passe invalide » apparaît dans le code source de la page, on n’a pas pu s’authentifier donc on génère un message d’erreur « Impossible de s authentifier a mon application avec le compte olivier »
Case 3 :
On accède à la page http://redmine.domaine.fr/logout et on vérifie que le message « Impossible de se deconnecter » n’apparaît pas dans le code source de la page.
Informations supplémentaires :
Il peut arriver qu’une application ait besoin d’une autre variable de le login / mot de passe pour s’authentifier. C’est le cas de l’application Redmine (Gestionnaire de projet en ruby). Cette application génère à la première connexion un id dans un champ hidden. Cet id est nécessaire pour l’authentification.
Voici comment ça se présente dans le code source de la page WEB :
<input name="authenticity_token" type="hidden" value="JL6zyxehqBpKTijQ1NotY8n/mUigkwewvYezH6VJ60s=" />
Au niveau du test case :
Pour récupérer la valeur du champ « authenticity_token», nous allons utiliser l’option « parseresponse » comme ceci :
parseresponse=’authenticity_token" type="hidden" value="|"|escape’
Ceci doit être mis dans le case id=1. La valeur du champ « authenticity_token » se trouvera dans la variable {PARSEDRESULT}.
Dans le case id=2, il nous restera plus qu’à ajouter « authenticity_token » à la méthode POST comme ceci :
postbody="back_url=http://redmine.domaine.fr/&authenticity_token={PARSEDRESULT}&username=olivier&password=monmotdepasse"
Pour plus d’infos, veuillez regarder cette documentation : http://www.webinject.org/manual.html#tcsetup
Utiliser Webinject avec Nagios
Préparation :
- Créer un répertoire Webinject dans ce même dossier où vous placerez le fichier webinject.pl, config.xml et le fichier testcases.xml
Pour tester plusieurs sites WEB vous pouvez créer plusieurs fichier testcases (ex : monappli.xml)
- Modifier le fichier config.pl pour adapter la sortie de webinject à Nagios en modifiant le reportype comme ceci :
<reporttype>nagios</reporttype>
exemple :
WebInject OK – All tests passed successfully in 0.35 seconds|time=0.35;0;10;0;0 case1=0.112;0;0;0;0 case2=0.126;0;0;0;0 case3=0.015;0;0;0;0
Création de la commande
Définir la commande comme ceci :
define command { command_name check_webinject command_line /usr/bin/perl $USER1$/Webinject/webinject.pl -c $ARG1$ $ARG2$ }
Création du service
Définir le service comme ceci:
define service{ use actif-generic hostgroup_name LINUX service_description HTTP_WEBINJECT check_command check_webinject!config.xml!testcases.xml }
Attribuez le service à un hôte
Recharger Nagios puis tester.
- Partagez-le sur Facebook
- Ajoutez-le à Google Bookmarks
- Postez-le sur Google Buzz
- Partagez-le sur Technorati
- Tweetez-le !
- Partagez-le sur Reddit
- Publiez-le sur Identica
Autres articles similaires: