« Retour

JMeter + Jenkins : la performance en continu

Mots-clés : JMeter, Jenkins, intégration continue, tests non-fonctionnels, tests de charge, tests de performance, open source, tutoriel

 

Hier, le lundi 10 avril 2017, le cyclone Cook traverse la Nouvelle Calédonie. Inquiets, les habitants se rendent en masse sur les sites d'informations météorologiques. Malheureusement, par intermittence, il semblerait que ces sites se soient retrouvés en état d'indisponibilité...

Une charge d'utilisateurs élevée peut compromettre la disponibilité d'un site web. Heureusement, certains tests non-fonctionnels aident à anticiper ce risque. Lancés périodiquement, au sein d'un cycle d'intégration continue, ils permettent de valider que l'applicatif résiste à une certaine charge d'utilisateurs. En prévision de la prochaine intempérie, nous vous proposons donc de voir comment intégrer des tests JMeter à votre instance Jenkins...

 

Vous débutez avec JMeter ?

JMeter est un logiciel libre qui permet de réaliser des tests de performance, de charge, de stress, de vieillissement et de robustesse. Notre article ne vise pas à vous apprendre à concevoir un plan de test JMeter ; pour cela, nous vous conseillons la documentation officielle, qui fournit des tutoriels très complets.

Juste un conseil : pour commencer, configurez JMeter en anglais de façon à coller au vocabulaire spécifique utilisé dans les tutoriels.

Installation de JMeter sur Linux

Attention : à ce jour, sur Linux, la commande apt-get install jmeter n’installe pas la dernière version.

Pour installer la dernière version de JMeter, récupérez le numéro de version de JMeter à cette adresse, puis lancez les commandes suivantes :

wget -c http://ftp.ps.pl/pub/apache//jmeter/binaries/apache-jmeter-NUMVERSION.tgz

tar -xf apache-jmeter-NUMVERSION.tgz

Lancer un test JMeter en ligne de commande

Jenkins va lancer le test JMeter hors-GUI, c’est pourquoi il est important de comprendre comment lancer un test en ligne de commande. Il est aussi bon à savoir que, même si l’interface JMeter est pratique pour configurer ou débugger les tests, elle est déconseillée pour les lancer car elle consomme beaucoup de ressources et cela est donc susceptible de créer des effets de sonde.

Pour lancer un test en ligne de commande, enregistrer le plan de test au format JMX, qui est un format de fichier xml propre à JMeter.

Puis, lancer la commande suivante :

chemin/vers/bin/.jmeter -n -t chemin/vers/plan-de-test.jmx

« -n » indique que l’on souhaite lancer le test hors interface,

« -t » précède le chemin du plan de test à exécuter.

Vous pouvez configurer un alias pour écrire simplement « jmeter » à la place du chemin complet, mais Jenkins ne reconnaîtra pas cet alias.

Le résultat est un peu austère… mais le plugin Jenkins est aussi là pour ça !

Lancer un test JMeter depuis Jenkins

  • Stocker le fichier JMX dans un dépôt (Git, Mercurial, SVN ou autre)
  • Créer un nouveau job. Attention, ne pas mettre d’espace dans le titre, sinon cela provoque des erreurs.
  • Configurer la gestion du code source afin de récupérer le contenu du dépôt à chaque build.
  • Dans la section « Build », ajouter une étape « Exécuter un script shell ». La compléter avec :

    chemin/vers/bin/./jmeter -n -t $JENKINS_HOME/workspace/NomDujob/plan-de-test.jmx -l $JENKINS_HOME/workspace/JMeter/plan-de-test.jtl -e

Le fichier jtl contient les informations nécessaires à la création du reporting. Il sera automatiquement généré.

  • Dans la section « Actions à la suite du build », ajouter une étape « Publish performance test result report »
  • Dans « Performance report », sélectionner « JMeter ». Ajouter la regex « **/*.jtl ». Un fichier JTL sera généré pendant le build et interprété par le plugin pour fournir des graphiques comme ceux-ci :

Il vous reste à définir les seuils relatifs ou absolus à partir desquels vous souhaitez que votre build soit déclaré instable ou en erreur. Pour cet exemple, nous avons arbitrairement choisi une définition absolue : 1 erreur = build instable, 10 erreurs = build en échec.

Conclusion

En intégrant les tests JMeter à votre chaîne d'ordonnancement, vous serez capables à tout moment de connaître, selon vos tests, les performances, la résistance ou l'endurance de votre applicatif à tester. Des indicateurs qui peuvent se révéler tout aussi critiques que ceux que l'on obtient pendant les tests fonctionnels. Attention, la phase de définition des seuils est critique ; il faut veiller à n'être ni trop permissif, ni trop sévère. Comme souvent dans le monde du test, c'est avant tout une question de compromis entre qualité et vélocité...

Dans un prochain article, nous parlerons de Gatling, un autre outil open-source concurrent de JMeter qui peut également d'intégrer avec Jenkins.

Bonne découverte, et bon courage à tous les Calédoniens qui se remettent du cyclone.

Vous aimerez peut-être...

Gérer les paramètres Jenkins quand on est maniaque (ou flemmard)

SonarQube met son grain de sel dans Gitlab !

Performance, charge, stress... quelle différence ?

Un avis ? Un commentaire ?

Cet espace est pour vous.