24
2011
[NAGIOS] HOWTO – Installer, configurer et utiliser Webinject avec ou sans nagios
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.
Articles similaires
Publicité :)
Articles récents
- Memento VI – Boostez Votre Productivité avec Vi : Trucs et Astuces à Connaître
- Configuration de Nginx pour Obtenir l’IP Réelle des Visiteurs avec CloudFlare
- Récupérer les informations d’un Ordinateur Terra à partir du numéros de série avec Python
- Grep – Extraire toutes les adresses IP d’un fichier text, Json, etc…
- Failed to Start File System Check – Vcenter 7
Mot-clefs
Commentaires récents
- Grep – Extraire toutes les adresses IP d’un fichier text, Json, etc… dans
- Grep – Extraire toutes les adresses IP d’un fichier text, Json, etc… dans
- Rotation des logs avec logrotate dans
- Hôte déconnecté sur le Vcenter. Impossible de se connecter à l’ESX. dans
- Pourquoi mon interface vlan ne veut pas devenir up ? dans
Intéressant. Toutefois, il existe un autre solution beaucoup plus userfriendly qui est Selenium. Userfriendly car il est possible d’écrire vos scripts avec Selenium IDE (plugin Firefox). Cet outil fait du live-capture, génère vos scripts dans plusieurs langages cibles. Bien entendu, ce n’est pas la panacée, parce que vous devrez modifier un peu vos scripts pour coller au mieux à vos besoins, mais ça permet de gagner pas mal de temps, et c’est adapter à du test fonctionnel sur la base de l’ihm.
Selenium, c’est aussi htmlunitdriver qui permet de faire du test intégrable dans une solution d’intégration continue. Htmlunitdriver, c’est du test à coder.
Enfin SeleniumGrid, qui permet entre autres de faire des d’interaction entre plusieurs ihms. Le lien http://code.google.com/p/selenium/
Je connaissais pas. je regarderais ça plus en détail lorsque j’aurais un peu de temps.
merci
++
je cherche à obtenir en sortie dans Nagios :
“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”
mais par défaut je me trouve avec
“WebInject OK – All tests passed successfully in 0.35 seconds|time=0.35;0;10;0;0”
Je ne vois pas le temps pour chaque Cas. J’ai beau chercher dans webinject.pl pas moyen. Une idée ou un exemple ?
J’ai cela :
./webinject.pl -c webinject/config.xml webinject/LNXXXXX_SOLR.xml
WebInject OK – All tests passed successfully in 0.169 seconds|time=0.169;0;10;0;0 case1=0.036;0;0;0;0 case2=0.007;0;0;0;0 case3=0.003;0;0;0;0
Voici mon fichier de conf (config.xml) :
5
10
nagios
Voici le fichier LNXXXXX_SOLR.xml : ici
$ ./webinject.pl -v
WebInject version 1.56
For more info: http://www.webinject.org*
Bon courage 😉
Merci ça correspond bien à ce que je cherche à faire.
A priori tout est ok dans le config XML et dans mon CASExxx.XML
Je pense que c’est dans le webinject.pl que ce trouve mon problème.
Dans le #Nagios plugin compatibility j’ai cette ligne print “WebInject OK – All tests passed successfully in $totalruntime seconds |time=$totalruntime;$end\n”;
Il me manque qlq chose dans ce plugin pour affihcer les cas après le $totalruntime
Si je peux avoir une copie de ce bloc se serait top.
Mais en tout cas merci encore.
Voici mon fichier webinject.pl
Bon courage
Merci beaucoup je reqarde ça