Présentation de JMeter

JMeter est un logiciel permettant de faire des tests de charge orientés performances ou orientés métiers (fonctionnels) sur différentes protocoles ou technologies. Il est développé par la Fondation Apache.

C’est une application entièrement Java avec une interface graphique utilisant l’API graphique Swing, pouvant donc fonctionner sur tout environnement / poste de travail acceptant une machine virtuelle Java, par exemple : Windows, Linux, Mac, etc.

Les protocoles ou technologies possibles pour un test avec JMeter sont très nombreux :

  • Web : HTTP, HTTPS pour des sites ‘web 1.0’, web 2.0 (ajax, flex-ws ou flex-amf)
  • WebServices : SOAP / XML-RPC
  • Base de données via les pilotes JDBC
  • Annuaire : LDAP
  • Messagerie orientée service via JMS
  • Service de messagerie : POP3, IMAP, SMTP
  • Service FTP
  • etc.

JMeter fonctionne en mode multi-threads (unités d’exécution multiples) qui permettent la concurrence des requêtes de tests durant le tir de charge ou bien d’avoir des paliers de tests en termes d’utilisateurs virtuels.

JMeter permet la lecture et l’analyse à froid des données d’un test de charge par enregistrement des données de résultats dans un fichier XML ou CSV.

JMeter dispose d’éléments Récepteurs permettant la visualisation des résultats sous forme de graphiques ou de statistiques, et ainsi d’interpréter ses résultats.

JMeter permet d’avoir des robots injecteurs pour simuler la charge tout en la répartissant sur plusieurs machines injecteurs (et ainsi éviter que le goulot d’étranglement soit le poste de test). Bien qu’aujourd’hui (2013), un poste de travail récent offre largement les capacités processeur et mémoire suffisante pour simuler de très nombreux utilisateurs virtuels.

JMeter est extensible, à travers la possibilité d’ajouter :

  • de nouveaux éléments de tests sur de nouveaux protocoles
  • de nouveaux comportements de tests via des compteurs de temps
  • de nouvelles visualisations personnalisées

Par ailleurs, JMeter est livré avec des fonctions (au sens macro) natives permettant l’injection de données dynamiques ou/et de la manipulation de données à la volée durant le tir de charge. Pour compléter, JMeter dispose d’éléments scriptés (de type JSR223/BSF/BeanShell) permettant de développer ses propres requêtes personnalisées et ceux-ci dans différents langages (Java, Groovy, Javascript, Jexl, etc.).

Dans le cas des applications Web, JMeter possède un élément Proxy permettant d’enregistrer automatiquement les requêtes de tests pour un tir, directement lors d’une session ‘modèle’ du scénario effectuée par un utilisateur ‘réel’. Ceci permet d’accélérer la préparation du tir.

Tout ceci, en d’autres termes moins « savants », et pour le responsable d’une application (web) :

JMeter est un outil de test de charge qui peut donc « tester » les performances d’une application en simulant des utilisateurs (qualifiés de ‘virtuels’) et en enregistrant les temps de réponses pour permettre leur analyse.

JMeter n’est qu’un outil de test, il convient donc de suivre une méthodologie pour effectuer un test de charge, tant au niveau de la préparation du tir, de la définition des objectifs du tir, que de son scénario d’exécution et de ses choix d’hypothèses de tir.

JMeter est un outil ‘générique’ de tests qui possède une grande souplesse et adaptabilité pour répondre à des exigences de scénario de tir.

Concrètement voici quelques exemples de tir de charge possibles :

  • Tester les temps de réponses d’une application web, en fonction du nombre d’utilisateurs virtuels
  • Tester les écarts de temps de réponse en fonction de paliers d’utilisateurs
  • Tester les différences de comportements d’une même application sur deux (ou plus) environnements d’exécution différents (par exemple cluster ou non, configuration 1 / configuration 2, etc)
  • Tester la robustesse d’une application (à partir de quand la solution s’interrompt brutalement (crash) ?…)
  • Tester fonctionnellement une application de manière automatique (tests de non régression, de validité fonctionnelle, etc)
  • Superviser une application (soit via une sorte de ‘ping’, soit par des éléments plus complexes).

D’autres possibilités existent, et ne demandent qu’à être pensées.

Pour conclure, JMeter est un outil qui permettra de valider le bon fonctionnement d’une application dans son contexte.

./

Le bonus de la fin est un schéma d’une architecture possible pour un test de charge sur un environnement complexe.

Architecture de test JMeter