Fév
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

Au sujet de l'auteur: Olivier Legras

Auteur de ce Blog, je partage quelques unes de mes notes que je juge utile à vous comme à moi. Je suis très heureux de voir que mon blog a de plus en plus d'affluence. Merci à vous!

8 Comments + Add Comment

  • 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

Laissez un commentaire