Hudson est une plate-forme d’intégration continue, JMeter est un outil de test de charge et aussi de tests fonctionnels (on a tendance à l’oublier, mais pour faire du test de charge, il faut savoir faire du test fonctionnel). Que diriez vous d’intégrer dans Hudson l’exécution d’un test (de charge) JMeter, et d’avoir un beau graphique pour voir l’évolution des temps de réponses de votre application en fonction des ‘builds’ Hudson / versions de votre application ?
La réponse à cette question est l’objet de ce tutoriel.
Les pré-requis :
- Un serveur Hudson (le mien est sous Linux Debian)
- Un script JMeter pour tester une application ou tout autre chose que sait tester JMeter (voir les différents tutoriels sur ce même blog)
- Changer le format de sortie des résultats de JMeter (au lieux de CSV, passer en JTL (xml)), pour cela, modifier dans le fichier jmeter.properties, la proprité suivante : jmeter.save.saveservice.output_format=xml
- L’installation du plugin « Hudson Performance plugin » depuis le gestionnaire des plugins intégré à Hudson, cf. la capture ci-dessous.
On va créer une nouvelle tâche dans Hudson (New Job).
On saisit un nom de tâche, puis on sélectionne l’option « Build a free-style software project » avant de clique sur le bouton OK.
Dans le formulaire de configuration de la tâche, dans la section Build on choisit l’invocation d’un script Ant.
Dans la configuration de l’invocation de Ant, on saisit la cible « all », et on ajoute dans les propriétés :
jmeter.dir=/var/lib/hudson/jobs/TestJMeter/jakarta-jmeter-2.4.1
Plus bas dans le formulaire de configuration de la tâche, on retrouve le plugin Performance. On le coche afin de l’activer.
Dans le champ Report files on saisit : « **/*.jtl » afin d’exécuter tous les fichiers .jtl (c’est-à-dire les fichiers script de test de JMeter) qui se trouveront dans l’espace de travail de la tâche (le workspace)
On pourra aussi configurer le champ Performance threshold afin de modifier le statut du « build » en fonction du pourcentage d’erreur trouvées.
Voilà, c’est fini pour le formulaire de configuration de la tâche, il faut bien entendu enregistrer le formulaire.
Maintenant, on entre dans une petite phase de « ligne de commande » afin de préparer son workspace.
On dépose sur le serveur Hudson, l’archive de JMeter (le tgz plutôt que le zip afin d’avoir les bons droits positionnés sur les fichiers).
Dans notre cas, l’archive jakarta-jmeter-2.4.1.tgz (nb. j’utilise une version de test de JMeter, la 2.4.1 n’est pas encore sortie à ce jour) est positionné dans /var/lib/hudson/jobs/TestJMeter
Ensuite on procède à la décompression de l’archive :
hudson@hudson:~/jobs/TestJMeter$ tar xfz jakarta-jmeter-2.4.1.tgz
On créé quelques répertoires :
hudson@hudson:~/jobs/TestJMeter$ mkdir workspace
hudson@hudson:~/jobs/TestJMeter$ mkdir workspace/scripts
On copie le fichier script JMeter dans le répertoire ci-dessous :
hudson@hudson:~/jobs/TestJMeter$ cp /tmp/test_webservices.jmx workspace/scripts
On édite le fichier de la tâche JMeter/Ant avec le contenu suivant :
hudson@hudson:~/jobs/TestJMeter$ vi workspace/build.xml
<project default="all"> <!-- Define an environment variable pointing to JMETER folder or change this --> <property environment="env"/> <property name="jmeter-home" location="${jmeter.dir}"/> <!-- Should report include response data for failures? --> <property name="show-data" value="y"/> <!-- ant-jmeter.jar comes with jmeter, be sure this is the release you have --> <path id="ant.jmeter.classpath"> <fileset dir="${jmeter-home}/extras"> <include name="ant-jmeter*.jar"/> </fileset> </path> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" classpathref="ant.jmeter.classpath" /> <target name="clean"> <delete dir="results"/> <delete file="jmeter.log"/> <mkdir dir="results/jtl"/> <mkdir dir="results/html"/> </target> <target name="test" depends="clean"> <jmeter jmeterhome="${jmeter-home}" resultlogdir="results/jtl"> <testplans dir="scripts" includes="*.jmx"/> </jmeter> </target> <property name="lib.dir" value="${jmeter-home}/lib"/> <!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ --> <path id="xslt.classpath"> <fileset dir="${lib.dir}" includes="xalan*.jar"/> <fileset dir="${lib.dir}" includes="serializer*.jar"/> </path> <!-- This is not needed for the plugin, but it produces a nice html report which can be saved usin hudson's archive artifact feature --> <target name="report" depends="test"> <xslt classpathref="xslt.classpath" basedir="results/jtl" destdir="results/html" includes="*.jtl" style="${jmeter-home}/extras/jmeter-results-detail-report_21.xsl"> <param name="showData" expression="${show-data}"/> </xslt> <!-- add images for best report display --> <copy file="${jmeter-home}/extras/expand.jpg" tofile="results/html/expand.jpg"/> <copy file="${jmeter-home}/extras/collapse.jpg" tofile="results/html/collapse.jpg"/> </target> <target name="all" depends="test, report"/> </project>
Une fois que le fichier build.xml est enregistré, revenir sur l’interface de gestion de Hudson. Au niveau de son projet, choisir le lien « Build Now » afin de lancer le premier test.
Hudson va donc lancer le test JMeter et afficher son succès ou échec. Depuis la console de gestion Hudson, au niveau de la tâche, il est possible d’avoir la sortie de console. La capture d’écran montre un exemple d’exécution réussie.
Sur la page d’accueil du projet dans Husdon, après quelques exécutions de « build », de nouveau graphiques apparaissent. Le lien Performance Trend permet d’avoir le détail des indicateurs de performances.
La capture ci-dessous montre les graphiques des indicateurs de performance.
Il est également possible de consulter le rapport HTML produit par la tâche JMeter/Ant. Pour cela, on se place sur la section Workspace, puis results > html et on clique sur le fichier HTML.
La capture d’écran ci-dessous montre le rapport HTML produit par la tâche JMeter/Ant.
Et voilà pour ce petit tutoriel de « mise en liaison » de JMeter et Hudson.
Bien entendu, en disposant des tâches hudson habituelles de construction d’une release de son application (récupération SVN, compilation, ear/war et déploiement sur un serveur de test) avant l’exécution du test JMeter et la génération du rapport, on a un cycle de release avec test de charge.
./
Une réflexion sur « Intégration d’un test JMeter dans Hudson avec le plugin Hudson Performance »
Les commentaires sont fermés.