Magazine High tech

[NAGIOS] HOWTO – Installer, configurer et utiliser Webinject avec ou sans nagios

Publié le 24 février 2011 par Crocodanser

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:


    Retour à La Une de Logo Paperblog

    A propos de l’auteur


    Crocodanser 15 partages Voir son profil
    Voir son blog

    l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte