Aide-mémoire Apache JMeter
Aide-mémoire Apache JMeter
Installation
| Plateforme | Commande |
|---|---|
| Ubuntu/Debian | sudo apt update && sudo apt install jmeter |
| Ubuntu (Snap) | sudo snap install jmeter |
| macOS (Homebrew) | brew install jmeter |
| Windows (Chocolatey) | choco install jmeter |
| Binary (Linux/macOS) | wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz && tar -xzf apache-jmeter-5.6.3.tgz |
| Docker | docker pull justb4/jmeter:latest |
| Prerequisites | Java JDK 8+ required: java -version |
# Add JMeter to PATH (Linux/macOS)
export JMETER_HOME=/opt/apache-jmeter-5.6.3
export PATH=$PATH:$JMETER_HOME/bin
# Verify installation
jmeter --version
# Increase heap size (add to ~/.bashrc or jmeter startup script)
export JVM_ARGS="-Xms1g -Xmx4g"
Commandes de base
| Commande | Description |
|---|---|
jmeter | Lancer l’interface graphique de JMeter |
jmeter -t test-plan.jmx | Ouvrir le plan de test spécifique dans l’interface graphique |
jmeter -n -t test.jmx -l results.jtl | Exécuter le test en mode non-GUI avec les résultats |
jmeter -n -t test.jmx -l results.jtl -e -o report/ | Exécuter le test et générer un tableau de bord HTML |
jmeter --version or jmeter -v | Afficher la version de JMeter |
jmeter --help or jmeter -h | Afficher l’aide et les options disponibles |
jmeter -? | Lister toutes les propriétés disponibles |
jmeter -n -t test.jmx -j jmeter.log | Exécuter le test avec un fichier journal personnalisé |
jmeter -g results.jtl -o dashboard/ | Générer un rapport HTML à partir des résultats existants |
jmeter -p custom.properties | Lancer avec un fichier de propriétés personnalisé |
jmeter -Xmx4g | Lancer avec une taille de heap augmentée (4Go) |
jmeter-server | Démarrer JMeter en mode serveur pour des tests distribués |
jmeter -n -t test.jmx -l results.csv | Exécuter le test et enregistrer les résultats au format CSV |
jmeter -n -t test.jmx -l results.xml | Exécuter le test et enregistrer les résultats au format XML |
jmeter -Jusers=100 | Remplacer la valeur de propriété à l’exécution |
Utilisation avancée
| Commande | Description |
|---|---|
jmeter -n -t test.jmx -r | Exécuter un test sur tous les serveurs distants |
jmeter -n -t test.jmx -R server1:1099,server2:1099 | Exécuter un test sur des serveurs distants spécifiques |
jmeter -n -t test.jmx -Gusers=100 -Grampup=60 | Définir les propriétés globales pour les serveurs distants |
jmeter -n -t test.jmx -r -X | Exécuter des tests distribués et quitter les serveurs distants après |
jmeter -n -t test.jmx -q env.properties -q users.properties | Utiliser plusieurs fichiers de propriétés |
jmeter -H proxy.example.com -P 8080 | Exécuter avec un proxy HTTP |
jmeter -H proxy.com -P 8080 -u username -a password | Exécuter avec un proxy authentifié |
jmeter -Lorg.apache.jmeter=DEBUG | Définir le niveau de log à DEBUG |
jmeter -Lorg.apache.jmeter.protocol.http=DEBUG | Définir le niveau de log pour un package spécifique |
jmeter-server -Djava.rmi.server.hostname=192.168.1.100 | Démarrer le serveur avec un hostname spécifique |
jmeter-server -Dserver_port=1099 | Démarrer le serveur sur un port personnalisé |
jmeter -n -t test.jmx -Jsummariser.interval=30 | Définir l’intervalle de résumé à 30 secondes |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xml | Forcer le format de sortie XML |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=true | Inclure les données de réponse dans les résultats |
jmeter -XX:+UseG1GC -n -t test.jmx | Exécuter avec le collecteur de garbage G1 |
jmeter -Dcom.sun.management.jmxremote -n -t test.jmx | Activer la surveillance JMX |
jmeter -Dhttp.keepAlive=false -n -t test.jmx | Désactiver HTTP keep-alive |
jmeter -g results.jtl -o dashboard/ -f | Forcer l’écrasement du tableau de bord existant |
| `jmeter -N “localhost | *.internal.com”` |
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesis | Installer les plugins JMeter via CLI |
Configuration
Fichier de propriétés JMeter (jmeter.properties)
# Thread and ramp-up settings
jmeter.threads=100
jmeter.rampup=60
# Remote server configuration
remote_hosts=server1:1099,server2:1099,server3:1099
# Result file configuration
jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.response_data=false
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=false
# HTTP settings
httpclient.reset_state_on_thread_group_iteration=true
http.keepAlive=true
http.connection.timeout=30000
http.socket.timeout=120000
# Summariser interval (seconds)
summariser.interval=30
# Log level
log_level.jmeter=INFO
log_level.jmeter.engine=DEBUG
Fichier de propriétés utilisateur (user.properties)
# Custom variables
baseurl=https://example.com
users=100
rampup=60
duration=300
# Environment-specific settings
env=production
api_key=your_api_key_here
Propriétés système
# Set system properties via command line
jmeter -Dhttp.proxyHost=proxy.example.com \
-Dhttp.proxyPort=8080 \
-Dhttps.proxyHost=proxy.example.com \
-Dhttps.proxyPort=8080 \
-n -t test.jmx
Configuration JVM (jmeterscript)
# Edit JMETER_HOME/bin/jmeter or set environment variable
export HEAP="-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m"
export GC_ALGO="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
export JVM_ARGS="$HEAP $GC_ALGO"
Configuration de test distribué
# In jmeter.properties on controller machine
remote_hosts=192.168.1.101:1099,192.168.1.102:1099,192.168.1.103:1099
# Server RMI configuration
server.rmi.ssl.disable=true
server.rmi.localport=4000
server_port=1099
# On remote server machines
java.rmi.server.hostname=192.168.1.101
Cas d’utilisation courants
Cas d’utilisation 1 : Test de charge de base avec rapport HTML
# Run load test with 100 users, 60s ramp-up, generate HTML report
jmeter -n -t load-test.jmx \
-Jusers=100 \
-Jrampup=60 \
-Jduration=300 \
-l results/results.jtl \
-e -o results/dashboard/ \
-j results/jmeter.log
# View the report
open results/dashboard/index.html # macOS
xdg-open results/dashboard/index.html # Linux
Cas d’utilisation 2 : Test de charge distribué sur plusieurs serveurs
# Step 1: Start JMeter servers on remote machines
# On server1 (192.168.1.101):
jmeter-server -Djava.rmi.server.hostname=192.168.1.101
# On server2 (192.168.1.102):
jmeter-server -Djava.rmi.server.hostname=192.168.1.102
# Step 2: Run distributed test from controller
jmeter -n -t distributed-test.jmx \
-R 192.168.1.101:1099,192.168.1.102:1099 \
-Gusers=500 \
-Grampup=120 \
-l distributed-results.jtl \
-e -o distributed-report/
# Step 3: Shutdown remote servers
jmeter -n -t distributed-test.jmx -R 192.168.1.101:1099,192.168.1.102:1099 -X
Cas d’utilisation 3 : Test de performance d’API avec plusieurs environnements
# Create environment-specific property files
# dev.properties:
echo "baseurl=https://dev-api.example.com" > dev.properties
echo "api_key=dev_key_123" >> dev.properties
# prod.properties:
echo "baseurl=https://api.example.com" > prod.properties
echo "api_key=prod_key_456" >> prod.properties
# Run test against dev environment
jmeter -n -t api-test.jmx \
-q dev.properties \
-Jusers=50 \
-l dev-results.jtl \
-e -o dev-report/
# Run test against production environment
jmeter -n -t api-test.jmx \
-q prod.properties \
-Jusers=200 \
-l prod-results.jtl \
-e -o prod-report/
Cas d’utilisation 4 : Intégration CI/CD (Jenkins/GitLab)
#!/bin/bash
# performance-test.sh - CI/CD pipeline script
# Set variables
TEST_PLAN="test-plans/load-test.jmx"
RESULTS_DIR="results/$(date +%Y%m%d_%H%M%S)"
USERS=${USERS:-100}
DURATION=${DURATION:-300}
# Create results directory
mkdir -p $RESULTS_DIR
# Run JMeter test
jmeter -n -t $TEST_PLAN \
-Jusers=$USERS \
-Jduration=$DURATION \
-l $RESULTS_DIR/results.jtl \
-e -o $RESULTS_DIR/dashboard/ \
-j $RESULTS_DIR/jmeter.log
# Check for errors (exit code)
if [ $? -eq 0 ]; then
echo "Test completed successfully"
# Archive results
tar -czf $RESULTS_DIR.tar.gz $RESULTS_DIR
# Optional: Upload to artifact storage
# aws s3 cp $RESULTS_DIR.tar.gz s3://bucket/results/
else
echo "Test failed with errors"
exit 1
fi
Cas d’utilisation 5 : Test de performance de base de données
# Test database performance with parameterized queries
jmeter -n -t database-test.jmx \
-Jdb.host=db.example.com \
-Jdb.port=5432 \
-Jdb.name=testdb \
-Jdb.user=testuser \
-Jdb.password=testpass \
-Jthreads=50 \
-Jrampup=30 \
-l db-results.jtl \
-e -o db-report/
# Generate report from existing results
jmeter -g db-results.jtl -o db-report-regenerated/
Meilleures pratiques
-
Toujours utiliser le mode non-GUI pour les tests réels : Le mode GUI consomme des ressources significatives et affecte la précision des tests. Utilisez
jmeter -npour tous les tests de performance. -
Allouer suffisamment de mémoire heap : Définir la taille de heap JVM à au moins 25% de la RAM disponible. Pour les grands tests :
export JVM_ARGS="-Xms2g -Xmx4g -XX:+UseG1GC" -
Utiliser le format CSV pour les fichiers de résultats : Le format CSV est plus efficace que XML. Désactiver la collecte de données inutiles pour réduire la surcharge :
jmeter.save.saveservice.response_data=false -
Implémenter des périodes de montée en charge appropriées : Éviter de démarrer tous les threads simultanément. Utiliser une montée en charge progressive (généralement 10-20% de la durée du test) pour simuler des modèles de charge réalistes.
-
Exploiter les tests distribués pour les charges élevées : Les limitations d’une seule machine peuvent fausser les résultats. Utiliser plusieurs serveurs JMeter pour les tests dépassant 500-1000 threads.
-
Paramétrer les données de test : Utiliser CSV Data Set Config ou des variables au lieu de valeurs codées en dur. Cela permet une configuration de test facile et le changement d’environnement.
-
Surveiller les ressources système pendant les tests : Suivre le CPU, la mémoire, le réseau et les E/S disque sur les machines JMeter et les systèmes cibles. Une utilisation élevée des ressources sur JMeter indique des goulots d’étranglement dans l’exécution du test.
-
Contrôler les versions des plans de test : Stocker
.jmxles fichiers et les fichiers de propriétés dans Git. Utiliser des messages de commit significatifs et baliser les versions pour la reproductibilité. -
Implémenter une corrélation et des assertions appropriées : Extraire les valeurs dynamiques (jetons, ID de session) et valider les réponses. Ne pas se contenter de mesurer la vitesse — vérifier l’exactitude.
-
Nettoyer entre les exécutions de tests : Effacer les répertoires de résultats et les journaux. Réinitialiser l’état de l’application si nécessaire pour garantir des conditions de test cohérentes.
Dépannage
| Problème | Solution |
|---|---|
| OutOfMemoryError during test | Increase heap size: export JVM_ARGS="-Xms2g -Xmx4g" or reduce threads/disable response data saving |
| Connection refused on remote servers | Check firewall rules for ports 1099 and 4000. Verify java.rmi.server.hostname is set correctly on server |
| Test results show 100% errors | Verify target URL is accessible, check proxy settings, review jmeter.log for detailed error messages |
| GUI freezes during large tests | Never run large tests in GUI mode. Use non-GUI: jmeter -n -t test.jmx -l results.jtl |
| Inconsistent results between runs | Assurez une montée en charge appropriée, effacez le cache/les cookies entre les exécutions, vérifiez la stabilité du réseau, vérifiez la charge du système cible |
| Cannot generate HTML report | Verify results file format is compatible (CSV/JTL), ensure output directory is empty or use -f flag to force overwrite |
| Remote servers not starting | Check Java version compatibility (JDK 8+), verify RMI registry port is available, review jmeter-server.log |
| SSL/TLS certificate errors | Add certificate to Java keystore or disable validation: jmeter -Jhttps.default.protocol=TLSv1.2 |
| Slow test execution | Désactiver les listeners en mode non-GUI, réduire la complexité des assertions, optimiser les expressions régulières, utiliser des extracteurs efficaces |
| ”Non HTTP response code: java.net.SocketException” | Augmenter les valeurs de timeout, vérifier les paramètres du pool de connexions, vérifier la capacité du système cible, réduire le nombre de threads |
| Distributed test results incomplete | Assurez-vous que tous les serveurs ont la même version du plan de test, vérifiez la connectivité réseau, confirmez la synchronisation de l’horloge entre les serveurs |
| High CPU on JMeter machine | Réduire le nombre de threads, désactiver les processeurs/écouteurs inutiles, utiliser des échantillonneurs plus simples, envisager des tests distribués |
| Cannot install plugins | Download Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings |
| Results file corrupted or empty | Assurez-vous d’avoir suffisamment d’espace disque, vérifiez les permissions de fichiers, confirmez que le processus JMeter s’est terminé avec succès |
| ”Address already in use” error | Change server port: jmeter-server -Dserver_port=1100, kill existing JMeter processes, wait for port release |
Référence rapide : Options de ligne de commande
| Option | Description | Exemple |
|---|---|---|
-n | Mode non-GUI | jmeter -n -t test.jmx |
-t | Fichier de plan de test | jmeter -t mytest.jmx |
-l | Fichier journal des résultats | jmeter -n -t test.jmx -l results.jtl |
-j | Fichier journal JMeter | jmeter -n -t test.jmx -j jmeter.log |
-r | Exécuter sur tous les serveurs distants | jmeter -n -t test.jmx -r |
-R | Exécuter sur des serveurs spécifiques | jmeter -n -t test.jmx -R server1,server2 |
-g | Générer un rapport à partir du fichier | jmeter -g results.jtl -o report/ |
-e | Générer un rapport après le test | jmeter -n -t test.jmx -l results.jtl -e -o report/ |
-o | Dossier de sortie pour le rapport | jmeter -g results.jtl -o dashboard/ |
-H | Hôte proxy | jmeter -H proxy.com -P 8080 |
-P | Port proxy | jmeter -H proxy.com -P 8080 |
-u | Nom d’utilisateur proxy | jmeter -H proxy.com -P 8080 -u user |
-a | Mot de passe proxy | jmeter -H proxy.com -P 8080 -a pass |
-J | Définir la propriété JMeter | jmeter -Jusers=100 -Jrampup=60 |
-G | Définir une propriété globale | jmeter -Gusers=100 (for remote servers) |
-D | Définir la propriété système | jmeter -Dhttp.proxyHost=proxy.com |
-L | Définir le niveau de log | jmeter -Lorg.apache.jmeter=DEBUG |
-p | Fichier de propriétés | jmeter -p custom.properties |
-q | Fichier de propriétés supplémentaire | jmeter -q env.properties |
-X | Quitter les serveurs distants | jmeter -n -t test.jmx -r -X |