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.
Création du job
Nous créons alors les éléments nécessaires à l’extraction : une metadata xml (input) qui représentera la source de données
Xml metadata
Xml metadata name
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).
Extracted xml schema
Xml schema configuration
Primary key configuration
Déclarons ensuite une metadata database (output) qui sera la destination des données.
New database metadata
Database metadata name
Db connection parameters
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 :
Injection des données

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 :
New datasource
renseigner BIRT sur le pilote JDBC à utiliser pour communiquer avec la base de données Manage datasource
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 :
Dataset SQL filter
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 :
Type de 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 :
Chart configuration
Enfin, nous pouvons génèrer le graphe final :
Générer
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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :