Analyser vos résultats JMeter lors de stress tests
L’analyse des résultats constitue l’étape la plus importante lors de tests de charge. En effet, c’est à ce moment précis que les données récoltées doivent trouver tout leur sens et nous permettre d’effectuer des choix éclairés afin d’améliorer les performances des applications.
Dans ce billet, vous apprendrez à mettre en place une chaine d’analyse complète des résultats de tests de charge en utilisant exclusivement des outils Open-Source : JMeter, Talend, MySql et BIRT.
Vous remarquerez la « très forte similarité » avec une chaine Décisionnelle. En effet, pourquoi de telles capacités seraient exclusivement réservées aux choix métiers et non aux choix techniques ?
Les fichiers de logs JMeter
Lors des tests de charge sur des applications, JMeter génère un fichier de log xml (extension .jtl) qui journalise l’ensemble des résultats des requêtes effectuées sur l’application. Par exemple, pour une application web, nous collecterons des données concernant le temps de réponse, le code de réponse, le timestamp de l’envoi de la requête etc. L’analyse des résultats consiste à traiter et consolider ces données et à générer des rapports et graphiques pertinents en utilisant généralement un outils de génération de rapports. Dans notre cas, nous utiliserons BIRT.
Dans bien des cas cependant, ce fichier « brute » est très volumineux et ne peut être traité directement par l’outil de reporting. Par exemple, un fichier XML contenant plusieurs centaines de milliers d’éléments ne peut pas toujours être lu par une JVM avec une approche DOM. D’autre part, il est souvent intéressant d’agréger des échantillons récents et plus anciens pour comparer l’impact des différents choix sur les performances.
Solution : utilisation d’un ETL et d’une base de données
Pour remédier à ce problème, nous pouvons opter pour une solution qui fait intervenir un ETL et une base de données en amont de BIRT en nous rapprochant ainsi d’une véritable plateforme de Business Intelligence. Un ETL ou « Extract-Transform-Load » est un dispositif logiciel qui permet d’importer/exporter des données vers/depuis une « base » (au sens large) en opérant d’éventuels traitements intermédiaires sur ces données. Dans notre cas, nous utiliserons Talend pour effectuer l’extraction des données depuis le fichier jtl vers une base de données MySql qui nous servira ensuite de DataWarehouse/Datamart.
L’avantage de l’utilisation d’une base de données est également de pouvoir effectuer une première agrégation des données au niveau de la base (ex: « group by » en SQL) et donc de décharger l’outil de reporting de ce premier niveau de traitement. BIRT se chargera ensuite des traitements restants et de la génération des rapports.
1ere étape : Extraction des données avec Talend
Pour faciliter le travail de Talend, il est intéressant de splitter le fichier xml principal en plusieurs parties et d’extraire les données à partir de ces fichiers.
Pour extraire les données avec Talend, nous créons d’abord un job qui définit l’enchaînement des traitements pour l’extraction des données depuis le fichier xml vers la base de données. Pour le moment, rien n’est renseigné au niveau du job, il faut au préalable créer les éléments qui le constituent.
Nous créons alors les éléments nécessaires à l’extraction : une metadata xml (input) qui représentera la source de données
A partir du fichier xml fourni, Talend pourra en extraire le schéma. Ce dernier étant identique pour tous les fichiers splittés, il suffira de modifier à chaque « run » le nom du fichier xml en entrée (metadata xml) pour injecter les différentes données dans notre DataWarehouse (MySql).
Déclarons ensuite une metadata database (output) qui sera la destination des données.
Enfin, après avoir créé les éléments du job, nous créons les enchaînements pour effectuer le traitement sur les données et nous lançons le job :
2ème étape : Génération des rapports avec BIRT
Pour générer les rapports dans BIRT, il suffit maintenant de déclarer la base de données alimentée ci-dessus en tant que source de données :
renseigner BIRT sur le pilote JDBC à utiliser pour communiquer avec la base de données
Puis créer les datasets, qui seront traités et affichés sur les graphiques. Dans notre cas, nous allons par exemple voir la variation du temps de réponse des requêtes :
Ici, nous remarquons la capacité à filtrer les données à traiter dans BIRT en utilisant une requête SQL qui sera traitée par le SGBD. BIRT est donc déchargé du traitement des filtres et donc des traitements éventuellement coûteux en ressource.
Enfin, vient la phase de création du graphe :
Nous choisissons les données à afficher à partir du DataSet configuré, dans notre cas en abscisse les id des requêtes et en ordonnée les temps de réponse :
Enfin, nous pouvons génèrer le graphe final :
Permettant d’obtenir le rendu final en pdf suivant :
Fichier pdf généré
Dans ce billet, vous avez appris à mettre en place une chaine d’analyse de résultats de tests de charge avec JMeter, Talend, MySql et BIRT.
Fichier du billet : Fichiers du demo