Blog Zenika

#CodeTheWorld

Java

Reporting dans JMeter avec BIRT

Lors des tests de performance d’une application, la partie la plus importante concerne bien sûr l’analyse des résultats obtenus. Un bon outil de test se doit donc de disposer de composants permettant la génération et l’exploitation de ces résultats. Tel est le cas de JMeter.
JMeter est un outil open source qui permet de faire du stress/load/performance testing sur différentes sortes d’applications dont des applications web, des applications de base de données, des web services, des annuaires LDAP, des applications de messagerie basées sur POP et IMAP. Il permet de simuler de la charge sur un serveur afin de tester la résistance et les performances de celui-ci selon différents types et quantités de charges.
JMeter propose de base des composants permettant de générer des rapports ainsi que des graphes de résultats. Cependant, ces composants ne sont pas très aboutis en terme de rendus et de paramétrage.
Cette limitation a poussé des développeurs à créer des scripts « custom » (en Perl, Python etc.) pour générer des graphiques plus ergonomiques et plus exploitables visuellement à partir des logs des résultats de JMeter.
Pour notre part, nous avons utilisé BIRT pour la génération de rapports JMeter. Lors de nos posts précédents, nous avions également parlé de cet outil. De par nos retours d’expérience sur le sujet, BIRT s’affirme comme étant l’un des outils de reporting Open source les plus aboutis du marché.

Présentation de BIRT

BIRT est un outil de reporting open source très performant destiné aux applications Web ou Desktop. De plus, BIRT possède une intégration native aux technologies Java / JEE.
Cet outil générique possède deux grandes forces : la diversité des sources de données que l’on peut y connecter et la diversité des rapports générés. En effet, d’une part, BIRT peut prendre en entrée plusieurs types de sources de données dont des fichiers CSV, des fichiers XML, des sources de données JDBC ainsi que des Web Services. D’autre part, il peut aussi produire des rapports en différents formats tel que le PDF, HTML, XLS, PPT, PostScript.
BIRT est disponible en version complète contenant tout l’environnement de développement Eclipse en plus de BIRT ou une version light contenant juste le strict minimum pour « designer » des rapports. Dans notre cas, la version light est amplement suffisante.

Utilisation de BIRT pour la génération de rapports dans JMeter

Lors du lancement des tests de charge, JMeter journalise les résultats des tests dans des fichiers .jtl.

  1. <?xml version=« 1.0 » encoding=« UTF-8 »?>
  2. <testResults version=« 1.2 »>
  3. <httpSample t=« 1733 » lt=« 1282 » ts=« 1132021485561 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  4. <httpSample t=« 431 » lt=« 120 » ts=« 1132021485992 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  5. <httpSample t=« 240 » lt=« 100 » ts=« 1132021486232 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  6. <httpSample t=« 130 » lt=« 110 » ts=« 1132021486362 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  7. <httpSample t=« 321 » lt=« 120 » ts=« 1132021486683 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  8. <httpSample t=« 200 » lt=« 100 » ts=« 1132021486883 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  9. <httpSample t=« 771 » lt=« 120 » ts=« 1132021487654 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  10. <httpSample t=« 310 » lt=« 100 » ts=« 1132021487964 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  11. <httpSample t=« 571 » lt=« 111 » ts=« 1132021488535 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  12. <httpSample t=« 241 » lt=« 120 » ts=« 1132021488776 » s=« true » lb=« sample1 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  13. <httpSample t=« 360 » lt=« 120 » ts=« 1132021489136 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  14. <httpSample t=« 411 » lt=« 120 » ts=« 1132021489547 » s=« true » lb=« sample1 «  rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  15. <httpSample t=« 340 » lt=« 110 » ts=« 1132021489897 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>
  16. </testResults>

Les fichiers jtl sont en fait de simples fichiers XML générées à partir des résultats des samples. BIRT pouvant générer directement des graphiques avec des fichiers XML en entrée, nous allons utiliser ces fichiers comme datasource.

Syntaxe JTL

Tout d’abord il est intéressant de s’intéresser aux données « logguées » par JMeter dans les fichiers jtl.

  1. <httpSample t=« 340 » lt=« 110 » ts=« 1132021489897 » s=« true » lb=« sample2 » rc=« 200 » rm=« OK » tn=« Thread Group 1-1 » dt=« text »/>

Un élément httpSample représente un résultat d’une requête JMeter. Il dispose des attributs suivants :

  • t : Elapsed time
  • lt : Latency : time to initial response
  • ts : Timestamp
  • s : Success flag
  • lb : label
  • rc : response code
  • rm : response message
  • tn : Thread name
  • dt : data type

Ce sont les attributs du fichier jtl ci-dessus qui seront utilisés par BIRT pour la génération des rapports de tests.

Création du rapport BIRT et connexion à la DataSource

Pour commencer, il suffit de créer un rapport vierge « Blank Report » dans un projet de rapport (« Report Project ») via le menu File/New/Report.
Une fois les résultats de tests générés dans un fichier .jtl, il ne reste qu’à connecter ces sources de données au rapport BIRT. Une DataSource de type XML doit donc être créée et doit être liée avec le fichier .jtl qui n’est autre qu’un simple fichier XML. Pour créer une DataSource, il faut tout simplement faire un clic-droit sur l’item DataSource dans la vue DataExplorer ensuite laissez vous guider.
Type de la DataSource
Connexion à la source de données

Définition des jeux de données

Avant même de créer des graphes, nous devons d’abord définir les données sur lesquelles nous allons travailler. Cette définition de jeux de données vise à mettre en place ce qu’on appelle en BIRT : un DataSet.
L’ajout d’un DataSet se fait de la même manière qu’une DataSource avec un clic-droit sur l’item DataSet de la vue DataExplorer. Grâce à la DataSet, nous allons mapper les lignes et les colonnes provenant des sources de donneés.
DataSet_RowMapping
DataSet_ColumnMapping

Création d’un graphe

Maintenant que la DataSet a été mise en place, nous pouvons créer un graphe. Prenons un exemple simple, affichons le temps de réponse pour chaque requête envoyée selon sa date d’estampillage. La création d’un graphe se fait, via un glisser-déposer du « Report Item » « Chart » situé dans la vue Palette. Ensuite, il suffit de se laisser guider par l’interface qui permet de mettre en place un graphe en trois étapes :

  • choix du type de graphe
  • choix des données à représenter
  • mise en forme du graphe
Choix du type de graphe

La première étape consiste à choisir le type de graphe que l’on voudrait représenter : dans notre cas, nous sélectionnons une courbe.
Type du graphique

Sélection des données

En choisissant la DataSet précédemment créée dans « Use Data from », il est possible de sélectionner les champs « timestamp » et « latency » pour les afficher respectivement sur l’axe des abscisses et des ordonnées.
Sélection des données

Mise en forme du graphe

BIRT offre la possibilité d’agir sur divers paramètres pour rendre plus le graphe plus lisible et impactant : titre, légende, axe des abscisses, axe des ordonnées, données représentées sur la courbe. Par exemple, nous pouvons afficher les coordonnées des points de la courbe et afficher les labels de l’axe des abscisses à la verticale.
Mise en forme du graphique
Voici le résultat obtenu : Rendu de l'exemple
Mais on peut aussi obtenir d’autres types de graphiques : Rendu - Histogramme
Le graphe ci-dessus, par exemple, donne une comparaison entre le temps d’attente moyen avant l’envoi d’une requête (attribut t du jtl) et le temps de réponse moyen (attribut lt du jtl), pour chaque requête.
Grâce à BIRT, il est possible d’avoir divers rendus de ce rapport tel qu’en PDF ou encore en HTML.
Afin d’obtenir des graphiques consolidés, il conviendrait d’introduire une étape intermédiaire afin de pré-agréger ces données XML brutes. Par exemple, une simple transformation XSLT pourrait être appliquée ou encore ces mêmes données pourraient être stockées dans une base de données relationnelle qui permettrait des regroupements plus aisés par SQL.

6 réflexions sur “Reporting dans JMeter avec BIRT

  • N’est-ce pas un peu compliqué pour générer un graphe a partir de données XML ?
    Excel fait ça trés bien, il me semble, avec la possibilité de faire des courbes lissées (pour enlever un peu de bruit par exemple) ou des moyenne sur plusieurs ‘run’.
    Quels avantages voyez vous à utiliser BIRT plutot qu’Excel ?

    Répondre
  • Les données manipulées par BIRT sont facilement exportables en une multitude de formats : PDF, Html… Il est même possible de lui faire générer une application sur mesure permettant l’exploitation des données (voir aussi : http://blog.zenika.com/index.php?po…).
    Il est également possible d’adapter le rapport ou le graphe en fonction des droits de l’utilisateur.

    Répondre
  • Laurent Vaills

    « Cette limitation a poussé des développeurs à créer des scripts « custom » (en Perl, Python etc.) pour générer des graphiques plus ergonomiques et plus exploitables visuellement à partir des logs des résultats de JMeter. »

    Auriez-vous toujours les URLs de ces scripts « custom » ?

    Après avoir défini mes scénarios et généré mes fichiers .jtl , je suis maintenant à la recherche d’outils pour générer des graphes de manière automatique, (i.e. : sans interface graphique). L’utilisation de Birt semble intéressante mais peut-être un peu surdimensionnée non ?

    Un truc sympa serait de pouvoir utiliser en offline les graphes présent dans ces plugins : http://code.google.com/p/jmeter-plu… .

    Répondre
  • Les scripts custom en question sont disponibles sur le wiki du projet : http://wiki.apache.org/jakarta-jmet

    C’est vrai que Jmeter-plugins a plutôt l’air sympa : je vais y jeter un petit coup d’oeil!
    merci pour le lien …

    Répondre

Répondre à Olivier CroisierAnnuler la réponse.

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

En savoir plus sur Blog Zenika

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading