Aller au contenu

Aide-mémoire Apache JMeter

Aide-mémoire Apache JMeter

Installation

PlateformeCommande
Ubuntu/Debiansudo 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
Dockerdocker pull justb4/jmeter:latest
PrerequisitesJava 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

CommandeDescription
jmeterLancer l’interface graphique de JMeter
jmeter -t test-plan.jmxOuvrir le plan de test spécifique dans l’interface graphique
jmeter -n -t test.jmx -l results.jtlExé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 -vAfficher la version de JMeter
jmeter --help or jmeter -hAfficher l’aide et les options disponibles
jmeter -?Lister toutes les propriétés disponibles
jmeter -n -t test.jmx -j jmeter.logExé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.propertiesLancer avec un fichier de propriétés personnalisé
jmeter -Xmx4gLancer avec une taille de heap augmentée (4Go)
jmeter-serverDémarrer JMeter en mode serveur pour des tests distribués
jmeter -n -t test.jmx -l results.csvExécuter le test et enregistrer les résultats au format CSV
jmeter -n -t test.jmx -l results.xmlExécuter le test et enregistrer les résultats au format XML
jmeter -Jusers=100Remplacer la valeur de propriété à l’exécution

Utilisation avancée

CommandeDescription
jmeter -n -t test.jmx -rExécuter un test sur tous les serveurs distants
jmeter -n -t test.jmx -R server1:1099,server2:1099Exécuter un test sur des serveurs distants spécifiques
jmeter -n -t test.jmx -Gusers=100 -Grampup=60Définir les propriétés globales pour les serveurs distants
jmeter -n -t test.jmx -r -XExécuter des tests distribués et quitter les serveurs distants après
jmeter -n -t test.jmx -q env.properties -q users.propertiesUtiliser plusieurs fichiers de propriétés
jmeter -H proxy.example.com -P 8080Exécuter avec un proxy HTTP
jmeter -H proxy.com -P 8080 -u username -a passwordExécuter avec un proxy authentifié
jmeter -Lorg.apache.jmeter=DEBUGDéfinir le niveau de log à DEBUG
jmeter -Lorg.apache.jmeter.protocol.http=DEBUGDéfinir le niveau de log pour un package spécifique
jmeter-server -Djava.rmi.server.hostname=192.168.1.100Démarrer le serveur avec un hostname spécifique
jmeter-server -Dserver_port=1099Démarrer le serveur sur un port personnalisé
jmeter -n -t test.jmx -Jsummariser.interval=30Définir l’intervalle de résumé à 30 secondes
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xmlForcer le format de sortie XML
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=trueInclure les données de réponse dans les résultats
jmeter -XX:+UseG1GC -n -t test.jmxExécuter avec le collecteur de garbage G1
jmeter -Dcom.sun.management.jmxremote -n -t test.jmxActiver la surveillance JMX
jmeter -Dhttp.keepAlive=false -n -t test.jmxDésactiver HTTP keep-alive
jmeter -g results.jtl -o dashboard/ -fForcer l’écrasement du tableau de bord existant
`jmeter -N “localhost*.internal.com”`
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesisInstaller 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èmeSolution
OutOfMemoryError during testIncrease heap size: export JVM_ARGS="-Xms2g -Xmx4g" or reduce threads/disable response data saving
Connection refused on remote serversCheck firewall rules for ports 1099 and 4000. Verify java.rmi.server.hostname is set correctly on server
Test results show 100% errorsVerify target URL is accessible, check proxy settings, review jmeter.log for detailed error messages
GUI freezes during large testsNever run large tests in GUI mode. Use non-GUI: jmeter -n -t test.jmx -l results.jtl
Inconsistent results between runsAssurez 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 reportVerify results file format is compatible (CSV/JTL), ensure output directory is empty or use -f flag to force overwrite
Remote servers not startingCheck Java version compatibility (JDK 8+), verify RMI registry port is available, review jmeter-server.log
SSL/TLS certificate errorsAdd certificate to Java keystore or disable validation: jmeter -Jhttps.default.protocol=TLSv1.2
Slow test executionDé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 incompleteAssurez-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 machineRéduire le nombre de threads, désactiver les processeurs/écouteurs inutiles, utiliser des échantillonneurs plus simples, envisager des tests distribués
Cannot install pluginsDownload Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings
Results file corrupted or emptyAssurez-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” errorChange server port: jmeter-server -Dserver_port=1100, kill existing JMeter processes, wait for port release

Référence rapide : Options de ligne de commande

OptionDescriptionExemple
-nMode non-GUIjmeter -n -t test.jmx
-tFichier de plan de testjmeter -t mytest.jmx
-lFichier journal des résultatsjmeter -n -t test.jmx -l results.jtl
-jFichier journal JMeterjmeter -n -t test.jmx -j jmeter.log
-rExécuter sur tous les serveurs distantsjmeter -n -t test.jmx -r
-RExécuter sur des serveurs spécifiquesjmeter -n -t test.jmx -R server1,server2
-gGénérer un rapport à partir du fichierjmeter -g results.jtl -o report/
-eGénérer un rapport après le testjmeter -n -t test.jmx -l results.jtl -e -o report/
-oDossier de sortie pour le rapportjmeter -g results.jtl -o dashboard/
-HHôte proxyjmeter -H proxy.com -P 8080
-PPort proxyjmeter -H proxy.com -P 8080
-uNom d’utilisateur proxyjmeter -H proxy.com -P 8080 -u user
-aMot de passe proxyjmeter -H proxy.com -P 8080 -a pass
-JDéfinir la propriété JMeterjmeter -Jusers=100 -Jrampup=60
-GDéfinir une propriété globalejmeter -Gusers=100 (for remote servers)
-DDéfinir la propriété systèmejmeter -Dhttp.proxyHost=proxy.com
-LDéfinir le niveau de logjmeter -Lorg.apache.jmeter=DEBUG
-pFichier de propriétésjmeter -p custom.properties
-qFichier de propriétés supplémentairejmeter -q env.properties
-XQuitter les serveurs distantsjmeter -n -t test.jmx -r -X