Apache JMeter 2.5 est sorti

Une nouvelle version de JMeter vient de sortir, elle était en gestation depuis plusieurs mois. J’y voyais une version 2.4.1, mais finalement comme il y a de nombreuses fonctionnalités ajoutées, et un bon nombre de bogues corrigés, on est passé directement de la 2.4 vers la 2.5.

Par ailleurs, cette version 2.5 a un sens particulier pour moi, puisque j’ai joué le rôle du « release manager » pour elle. Ainsi j’ai réalisé le processus de « délivrance » de la nouvelle version (vote de release, création des archives à télécharger, signature numérique, mise à jour du site Jakarta/JMeter, et annonce).

Voici un petit tour des principales nouveautés :

Nouvelle implémentation Requête HTTP

Avant JMeter possédait deux implémentations différentes pour réaliser une Requête HTTP : Java et HTTPClient version 3.1.

Avec la version 2.5, il y a trois, toujours les deux premières plus une nouvelle « HTTPClient4 » qui dont repose sur la version 4.x de l’API HTTPClient d’Apache.

Lors de cet ajout, les deux échantillons requêtes HTTP existants ont été fusionné en un seul, et une nouvelle liste déroulante (cf capture) dans la configuration de la Requête HTTP permet de choisir l’implémentation. Par défaut, c’est « vide », et cela correspond à l’implémentation historique Java.

  • NB1. Il est possible de changer l’implémentation par défaut à utiliser par le Proxy JMeter, via le paramètre jmeter.httpsampler dans le fichier jmeter.properties.
  • NB2. Théoriquement la meilleure implémentation en termes de qualité/performance est HTTPClient4.

Récupération parallèle des ressources d’une page

Une nouvelle fonctionnalité ajoutée également dans la Requête HTTP, est la possibilité de récupérer en parallèle les ressources associées à une page (i.e. les css, js, images, etc), via un pool d’unités d’exécution dont la taille est paramétrable (cf. capture).

Cette nouvelle fonctionnalité permet entre autre de « simuler » mieux le comportement des navigateurs actuels qui parallélisent la récupération des éléments d’une page (pour un affichage plus rapide). Continuer la lecture de Apache JMeter 2.5 est sorti

Utiliser JMeter pour superviser un serveur Tomcat

Voici une nouvelle version du tutoriel JMeter pour superviser un serveur Tomcat. On passe à la version 7 de Tomcat et avec un JMeter en français.

Nous allons donc utiliser JMeter pour supervision le fonctionnement d’un serveur Tomcat à travers son interface de statut.

Le pré-requis est bien entendu d’avoir à disposition un serveur Tomcat (sous Unix/Linux ou Windows) tournant sur un Java JDK.

On va commencer par « ouvrir » le service de statut du Tomcat. Pour cela, Continuer la lecture de Utiliser JMeter pour superviser un serveur Tomcat

Envoyer un email avec JMeter via son élément Requête SMTP

Ce billet est un petit « howto » pour vous montrer comment utiliser JMeter pour envoyer un email (courriel), ici en utilisant le serveur de messagerie SMTP de Google Mail.

Pour rappel, le SMTP (Simple Message Transfer Protocol) est le protocole normalisé d’échange de message électronique (email). Dans JMeter depuis la version 2.4, un nouvel échantillon appelé Requête SMTP a été ajouté pour avoir un client SMTP qui envoi donc un email.

Bien entendu, JMeter étant un outil de test de charge, avec cet échantillon, on peut faire un test de charge sur un serveur de messagerie franchement installé pour vérifier sa tenue de charge et robustesse (ce qui est mon cas), on peut aussi utiliser cet échantillon SMTP pour par exemple s’envoyer un email de rapport à la fin d’un test de charge « long » (qui dure plusieurs heures ou jours), ou tout simplement dans le cadre de la mise en place d’un système d’alerte en cas de temps de réponse dégradé d’un site web (par exemple) avec un script qui s’exécute toutes les x minutes ou heures.

Revenons à notre sujet, voici notre arbre JMeter tout simple pour ce test :

Continuer la lecture de Envoyer un email avec JMeter via son élément Requête SMTP

Deux tutoriels sur la réalisation de plan de tests de charge

Antonio Gomes Rodrigues nous livre deux tutoriels sur la réalisation de plan de tests de charge :

Par le passé, il avait déjà publié un autre tutoriel sur l’audit de performances d’une application en Java EE.

Intégration d’un test JMeter dans Hudson avec le plugin Hudson Performance

Hudson est une plate-forme d’intégration continue, JMeter est un outil de test de charge et aussi de tests fonctionnels (on a tendance à l’oublier, mais pour faire du test de charge, il faut savoir faire du test fonctionnel). Que diriez vous d’intégrer dans Hudson l’exécution d’un test (de charge) JMeter, et d’avoir un beau graphique pour voir l’évolution des temps de réponses de votre application en fonction des ‘builds’ Hudson / versions de votre application ?

La réponse à cette question est l’objet de ce tutoriel. Continuer la lecture de Intégration d’un test JMeter dans Hudson avec le plugin Hudson Performance

JMeter et Groovy : avoir des requêtes HTTP concurrentes

Maintenant que nous avons vu comment faire des scripts Groovy dans JMeter, utilisons Groovy pour faire des requêtes HTTP parallèles avec JMeter.

Oh ! Des requêtes parallèles !? Le vieux rêve dans JMeter… certainement l’une des premières questions que j’ai posé sur la mailing-list des utilisateurs JMeter (jmeter-user).

Bon, je vous préviens, il ne s’agit pas encore de faire un méga test de charge avec ce genre de requêtes parallèles, mais cela peut aider pour des tests ayant des besoins de lancement simultané de requêtes, ou toute autre idée qui vous vient à l’esprit.

Le premier pré-requis est donc d’avoir un JMeter prêt pour faire du Groovy.

Ensuite, nous allons utiliser HTTPBuilder, qui est une couche API basée sur Apache HttpClient, et accessible en Groovy. HTTPBuilder sait faire pas mal de choses (comme du parsing automatique de requêtes JSON), etc. Ici, nous allons dans ce billet seulement nous intéresser à sa capacité à faire des requêtes HTTP de manière asynchrone.

Le petit nom de ce type de requête dans HTTPBuilder est AsyncHTTPBuilder. C’est une requête HTTP qui, au lieu d’être exécutée en premier plan, est envoyée en arrière-plan via une exécution dans un pool d’exécution (élément Executor dans l’API Java) et l’utilisation d’un type particulier : java.util.concurrent.Future pour le résultat de l’exécution de la requête. Ce ‘future’ permet d’avoir la possibilité de lancer plusieurs requêtes HTTP asynchrones (quasiment en même temps), puis de récolter le résultat de leurs exécutions ensuite. Continuer la lecture de JMeter et Groovy : avoir des requêtes HTTP concurrentes

Quelques nouvelles. JMeter, jmeter-plugins, Debian 6.0, Nokia N8

Même si cela ne se voit pas trop, je suis relativement imprégné de JMeter, en effet, j’ai développé un nouveau récepteur graphique pour voir sous forme de graphique ses résultats d’une manière plus parlante que les récepteurs graphiques existants nativement sous JMeter, mais malheureusement des problèmes de compatibilité de licence Apache licence vs LGPL ne permettent pas de committer directement ce travail dans JMeter (je sais, j’aurais dû faire attention…). Toujours est-il que je dois maintenant externaliser ce récepteur sous forme d’extensions. Je vais certainement le proposer sur apache-extras, un lieu de stockage de projets liés à la fondation Apache.

Néanmoins il ne faut pas attendre ce nouveau récepteur pour avoir des récepteurs graphiques jolis car il existe des récepteurs dans l’extension jmeter-plugins, qui permettent d’avoir une belle représentation graphique (entre autres) de ses résultats. C’est excitant à tester, les différents graphiques sont d’une aide précieuse pour l’analyse d’un tir. Continuer la lecture de Quelques nouvelles. JMeter, jmeter-plugins, Debian 6.0, Nokia N8

JMeter et Groovy : exemple d’échantillon BSF/Groovy

JMeter dispose de plusieurs éléments « BSF » pour Bean Scripting Framework. Ce cadre de travail (framework), fait par la Fondation Apache, permet de faire un pont entre le Java de JMeter et un code script dans un autre langage de programmation.

Plus précisément ces éléments BSF permettent d’avoir accès à un certain nombre d’objets internes de JMeter (comme l’objet SampleResult correspondant au résultat courant : temps de réponses, nom, latence, etc.), tout en pouvant effectuer des opérations (de programmation) dessus avec un langage de programmation qui n’est pas forcément du Java (le langage utilisé pour créer JMeter).

BSF supporte un grand nombre de langage, soit directement c’est-à-dire distribué dans l’archive binaire de BSF, soit directement par les langages eux-mêmes, qui dans ces cas-là proposent leur moteur BSF.

Dans ce billet, nous allons voir comment faire du Groovy (définit comme un langage dynamique et agile pour Java) dans JMeter à travers ces éléments BSF. Continuer la lecture de JMeter et Groovy : exemple d’échantillon BSF/Groovy

JMeter : petit test JMS Publication – Abonnement avec ActiveMQ

Pour faire suite à ce billet qui montre un test JMS de type Point-à-Point, voici un autre test JMS mais cette fois avec la notion d’abonnement (subscriber) et de publication (publisher).

Comme pour le premier test, nous continuons avec la messagerie orientée message (MOM) Apache ActiveMQ.

Après avoir téléchargé l’archive binaire d’ActiveMQ, on le décompresse, puis on le démarre avec ces commandes :

cd <Repertoire_ActiveMQ>
./bin/activemq start

Il est possible de vérifier que le serveur ActiveMQ fonctionne bien en se connectant sur http://localhost:8161/admin/ correspondant à l’URL de l’interface d’administration.

Du coté de JMeter voici comment ce présente notre petit test :

Tout d’abord, on notera la présence de 2 Groupes d’unités : un réservé pour l’Abonnement et un autre pour la Publication. Continuer la lecture de JMeter : petit test JMS Publication – Abonnement avec ActiveMQ

JMeter : le testeur d’expression régulière

Depuis la version 2.4 de JMeter, un nouvel sous-élément du récepteur Arbre de résultats est apparu, il s’agit du Testeur de RegExp.

Avant de vous montrer comment le trouver et l’utiliser, parlons-en un peu.

Comme vous le savez peut-être, JMeter dispose d’un élément Extracteur Expression régulière dans la catégorie Post-processeurs. La vocation de cet élément Extracteur Expression régulière est d’extraire à partir d’une expression régulière une ou plusieurs chaînes de caractères depuis la réponse reçue d’un échantillon de test. La puissance en termes d’extraction de données de cet élément est très forte, cependant, il est parfois peu aisée de trouver du premier coup la bonne expression régulière qui fera ce que vous voulez. En effet, vous devez jouer et rejouer le scénario pour tester votre expression régulière tant qu’elle n’est pas au point.

C’est là qu’intervient le Testeur de RegExp. Continuer la lecture de JMeter : le testeur d’expression régulière