Qu'est-ce que JMeter ?

Apache JMeter est un outil gratuit de test de charge en Java. Fonctionnement des plans de test, options CLI et erreurs fréquentes.

Qu'est-ce qu'Apache JMeter ?

Apache JMeter est un outil gratuit et open source de test de charge, écrit en Java. On construit un plan de test, en général dans son interface de bureau, on l'enregistre dans un fichier .jmx et on l'exécute pour simuler de nombreux utilisateurs sur une application web, une API, une base de données ou un autre serveur, pendant qu'il mesure temps de réponse, débit et erreurs.

Conçu d'abord pour les applications web, il couvre aujourd'hui davantage. Son manuel cite des tests web (HTTP/HTTPS), FTP, JDBC, LDAP, Java, JUnit et JMS (JDBC demande le pilote de votre base, JMS un jar client de votre fournisseur).

Comment est construit un test JMeter

  • Test Plan : le conteneur de tout, enregistré dans le fichier .jmx.
  • Thread Group : chaque thread est un utilisateur virtuel. Vous réglez le nombre de threads, la durée de montée en charge (ramp-up) et le nombre de boucles ou la durée. Voir le guide sur la période de ramp-up dans JMeter.
  • Samplers : les requêtes elles-mêmes : HTTP Request, JDBC Request, JMS Publisher, etc.
  • Config elements et timers : valeurs communes, CSV Data Set Config pour les données de test, et temporisateurs qui simulent le temps de réflexion entre deux requêtes.
  • Assertions : contrôles sur chaque réponse, comme le code de statut ou un texte dans le corps.
  • Listeners : collectent et affichent les résultats. Utiles pour déboguer, mais à désactiver quand ils sont lourds lors d'un vrai test de charge.

Exemple : un test de paiement

Vous voulez savoir si la connexion et le paiement tiennent avec 200 utilisateurs. Dans un Thread Group, vous réglez 200 threads avec 120 secondes de ramp-up, ajoutez un HTTP Request pour la connexion et un pour le paiement, lisez les identifiants dans un fichier CSV et ajoutez une assertion vérifiant que chaque réponse est un 200. Vous déboguez le script dans l'interface avec un ou deux utilisateurs, puis vous le lancez en ligne de commande :

jmeter -n -t checkout.jmx -l results.jtl -e -o report

-n exécute sans interface, -t désigne le plan de test, -l le fichier de résultats, et -e -o génèrent le rapport HTML dans un dossier qui ne doit pas exister ou doit être vide. D'après la documentation de JMeter, la GUI sert à créer et déboguer le script, et les tests de charge doivent tourner en mode non-GUI. La version actuelle est la 5.6.3 et elle exige Java 8 ou plus récent (jmeter.apache.org).

Erreurs fréquentes

  • Générer la charge depuis la GUI. Elle n'est pas faite pour cela. Utilisez la ligne de commande, comme dans le guide du mode non-GUI de JMeter.
  • Saturer le générateur de charge. Si la machine qui exécute JMeter manque de CPU ou de mémoire, vous mesurez votre portable et non votre serveur. Surveillez-la pendant le test ou répartissez la charge sur plusieurs machines.
  • Données et jetons figés. Rejouer un seul utilisateur avec un seul identifiant de session teste votre cache. Paramétrez les utilisateurs et extrayez les valeurs dynamiques, comme les jetons CSRF.
  • Pas de temps de réflexion. Des utilisateurs qui ne s'arrêtent jamais envoient bien plus de requêtes que de vrais visiteurs.
  • Ne lire que la moyenne. Regardez les percentiles ; l'entrée sur la latence explique pourquoi.
  • Sauter le test à blanc avec un seul utilisateur. Un script cassé donne un « résultat » très rapide, rempli d'erreurs.

JMeter ou k6

JMeter privilégie l'interface graphique et stocke les tests en XML, avec une large couverture de protocoles. k6 privilégie le code : ses tests en JavaScript s'intègrent naturellement dans une pull request. Le comparatif k6 et JMeter détaille les compromis.

La place de JMeter dans les tests

Le même script sert plusieurs objectifs en changeant seulement le Thread Group : un test de charge régulier, un pic soudain pour le spike testing, ou des appels répétés à un endpoint pour les tests d'API.

Exécuter des scripts JMeter avec LoadFocus

Une seule machine ne génère qu'une charge limitée. LoadFocus JMeter Load Testing exécute votre .jmx depuis 25 régions cloud : vous importez le fichier, réglez utilisateurs virtuels, durée et ramp-up dans le navigateur, et vos fichiers CSV et plugins suivent. Le plan Free autorise jusqu'à 10 utilisateurs simultanés et des tests de 60 secondes ; les tests plus grands demandent un plan payant (voir les tarifs).

Avant un gros test, le validateur gratuit de scripts JMeter contrôle un .jmx à la recherche d'erreurs de syntaxe et de configuration. Sans script, les convertisseurs gratuits en créent un à partir d'une commande cURL, d'un fichier HAR, d'une spécification OpenAPI ou d'une collection Postman.

Questions fréquentes : Apache JMeter

JMeter est-il gratuit ?

Oui. Apache JMeter est un logiciel open source sous licence Apache. Vous ne payez que les machines sur lesquelles il tourne, ou un service cloud qui l'exécute pour vous.

JMeter a-t-il besoin de Java ?

Oui. JMeter est une application Java et la version 5.6.3 exige Java 8 ou plus récent. Le manuel recommande un JDK plutôt qu'un JRE, car l'enregistrement HTTPS utilise le keytool du JDK.

JMeter ne sert-il que pour les sites web ?

Non. Il est né avec les applications web, mais peut aussi tester FTP, des bases JDBC, LDAP, JMS et des services Java.

Pourquoi ne pas lancer un test de charge en mode GUI ?

La GUI consomme des ressources dont le test a besoin et sert à construire et déboguer. Lancez la charge en mode non-GUI avec -n -t.

Puis-je exécuter mon script JMeter dans le cloud sans serveur ?

Oui. Importez le .jmx dans LoadFocus, choisissez régions et charge, et les générateurs de charge sont provisionnés pour le test.

Quelle est la vitesse de votre site web?

Augmentez sa vitesse et son référencement naturel de manière transparente avec notre Test de Vitesse gratuit.

Test gratuit de vitesse du site Web

Analyser la vitesse de chargement de votre site Web et améliorer ses performances avec notre outil gratuit de vérification de la vitesse de la page.