Ir al contenido

Hoja de Referencia de Apache JMeter

Hoja de Referencia de Apache JMeter

Instalación

PlatformComando
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"

Comandos Básicos

ComandoDescripción
jmeterIniciar GUI de JMeter
jmeter -t test-plan.jmxAbrir plan de pruebas específico en GUI
jmeter -n -t test.jmx -l results.jtlEjecutar prueba en modo no GUI con resultados
jmeter -n -t test.jmx -l results.jtl -e -o report/Ejecutar prueba y generar panel de control HTML
jmeter --version or jmeter -vMostrar versión de JMeter
jmeter --help or jmeter -hMostrar ayuda y opciones disponibles
jmeter -?Listar todas las propiedades disponibles
jmeter -n -t test.jmx -j jmeter.logEjecutar prueba con archivo de registro personalizado
jmeter -g results.jtl -o dashboard/Generar informe HTML a partir de resultados existentes
jmeter -p custom.propertiesLanzar con archivo de propiedades personalizado
jmeter -Xmx4gLanzar con tamaño de heap aumentado (4GB)
jmeter-serverIniciar JMeter en modo servidor para pruebas distribuidas
jmeter -n -t test.jmx -l results.csvEjecutar prueba y guardar resultados como CSV
jmeter -n -t test.jmx -l results.xmlEjecutar prueba y guardar resultados como XML
jmeter -Jusers=100Anular el valor de la propiedad en tiempo de ejecución
ComandoDescripción
jmeter -n -t test.jmx -rEjecutar prueba en todos los servidores remotos
jmeter -n -t test.jmx -R server1:1099,server2:1099Ejecutar prueba en servidores remotos específicos
jmeter -n -t test.jmx -Gusers=100 -Grampup=60Establecer propiedades globales para servidores remotos
jmeter -n -t test.jmx -r -XEjecutar pruebas distribuidas y salir de servidores remotos después
jmeter -n -t test.jmx -q env.properties -q users.propertiesUsar múltiples archivos de propiedades
jmeter -H proxy.example.com -P 8080Ejecutar con proxy HTTP
jmeter -H proxy.com -P 8080 -u username -a passwordEjecutar con proxy autenticado
jmeter -Lorg.apache.jmeter=DEBUGEstablecer nivel de log a DEBUG
jmeter -Lorg.apache.jmeter.protocol.http=DEBUGEstablecer nivel de registro para paquete específico
jmeter-server -Djava.rmi.server.hostname=192.168.1.100Iniciar servidor con nombre de host específico
jmeter-server -Dserver_port=1099Iniciar servidor en puerto personalizado
jmeter -n -t test.jmx -Jsummariser.interval=30Establecer intervalo de resumen en 30 segundos
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xmlForzar formato de salida XML
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=trueIncluir datos de respuesta en resultados
jmeter -XX:+UseG1GC -n -t test.jmxEjecutar con el recolector de basura G1
jmeter -Dcom.sun.management.jmxremote -n -t test.jmxHabilitar monitoreo JMX
jmeter -Dhttp.keepAlive=false -n -t test.jmxDeshabilitar HTTP keep-alive
jmeter -g results.jtl -o dashboard/ -fForzar sobrescritura del dashboard existente
`jmeter -N “localhost*.internal.com”`
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesisInstalar plugins de JMeter mediante CLI

Archivo de Propiedades de 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

Archivo de Propiedades de Usuario (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

Propiedades del Sistema

# 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

Configuración de 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"

Configuración de Pruebas Distribuidas

# 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

Casos de Uso Comunes

Caso de Uso 1: Prueba de Carga Básica con Informe 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

Caso de Uso 2: Prueba de Carga Distribuida en Múltiples Servidores

# 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

Caso de Uso 3: Pruebas de Rendimiento de API con Múltiples Entornos

# 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/

Caso de Uso 4: Integración 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

Caso de Uso 5: Pruebas de Rendimiento de Base de Datos

# 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/

Mejores Prácticas

  • Siempre usar modo no GUI para pruebas reales: El modo GUI consume recursos significativos y afecta la precisión de la prueba. Usar jmeter -npara todas las pruebas de rendimiento.

  • Asignar suficiente memoria heap: Establecer el tamaño de heap de JVM a al menos 25% de la RAM disponible. Para pruebas grandes:export JVM_ARGS="-Xms2g -Xmx4g -XX:+UseG1GC"

  • Usar formato CSV para archivos de resultados: El formato CSV es más eficiente que XML. Deshabilite la recopilación de datos innecesarios para reducir la sobrecarga: jmeter.save.saveservice.response_data=false

  • Implementar períodos de ramp-up adecuados: Evite iniciar todos los hilos simultáneamente. Use un ramp-up gradual (típicamente 10-20% de la duración de la prueba) para simular patrones de carga realistas.

  • Aprovechar pruebas distribuidas para cargas altas: Las limitaciones de una sola máquina pueden sesgar los resultados. Use múltiples servidores JMeter para pruebas que excedan 500-1000 hilos.

  • Parametrizar datos de prueba: Use CSV Data Set Config o variables en lugar de valores codificados. Esto permite una configuración de prueba fácil y cambio de entorno.

  • Monitorear recursos del sistema durante las pruebas: Rastree CPU, memoria, red y E/S de disco tanto en máquinas JMeter como en sistemas objetivo. Un alto uso de recursos en JMeter indica cuellos de botella en la ejecución de pruebas.

  • Controlar versiones de planes de prueba: Almacenar .jmxarchivos y archivos de propiedades en Git. Use mensajes de commit significativos y etiquete lanzamientos para reproducibilidad.

  • Implementar correlación y aserciones adecuadas: Extraiga valores dinámicos (tokens, ID de sesión) y valide respuestas. No solo mida la velocidad, verifique la corrección.

  • Limpiar entre ejecuciones de pruebas: Borre directorios de resultados y registros. Restablezca el estado de la aplicación cuando sea necesario para garantizar condiciones de prueba consistentes.

Resolución de problemas

ProblemaSolución
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 runsAsegúrese de tener una rampa de inicio adecuada, limpiar caché/cookies entre ejecuciones, verificar la estabilidad de la red, comprobar la carga del sistema objetivo
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 executionDeshabilitar listeners en modo no GUI, reducir la complejidad de las aserciones, optimizar expresiones regulares, usar extractores eficientes
”Non HTTP response code: java.net.SocketException”Aumentar valores de timeout, verificar configuraciones de grupo de conexiones, verificar capacidad del sistema de destino, reducir recuento de hilos
Distributed test results incompleteAsegúrese de que todos los servidores tengan la misma versión del plan de pruebas, verifique la conectividad de red, compruebe la sincronización de reloj entre servidores
High CPU on JMeter machineReducir el recuento de hilos, deshabilitar procesadores/listeners innecesarios, usar muestreadores más simples, considerar pruebas distribuidas
Cannot install pluginsDownload Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings
Results file corrupted or emptyAsegúrese de tener suficiente espacio en disco, verifique los permisos de archivo, confirme que el proceso de JMeter se completó correctamente
”Address already in use” errorChange server port: jmeter-server -Dserver_port=1100, kill existing JMeter processes, wait for port release

Referencia rápida: Opciones de línea de comandos

OpciónDescripciónEjemplo
-nModo sin interfaz gráficajmeter -n -t test.jmx
-tArchivo de plan de pruebasjmeter -t mytest.jmx
-lArchivo de registro de resultadosjmeter -n -t test.jmx -l results.jtl
-jArchivo de registro de JMeterjmeter -n -t test.jmx -j jmeter.log
-rEjecutar en todos los servidores remotosjmeter -n -t test.jmx -r
-REjecutar en servidores específicosjmeter -n -t test.jmx -R server1,server2
-gGenerar informe desde archivojmeter -g results.jtl -o report/
-eGenerar informe después de la pruebajmeter -n -t test.jmx -l results.jtl -e -o report/
-oCarpeta de salida para informejmeter -g results.jtl -o dashboard/
-HHost proxyjmeter -H proxy.com -P 8080
-PPuerto proxyjmeter -H proxy.com -P 8080
-uNombre de usuario de proxyjmeter -H proxy.com -P 8080 -u user
-aContraseña de proxyjmeter -H proxy.com -P 8080 -a pass
-JDefinir propiedad de JMeterjmeter -Jusers=100 -Jrampup=60
-GDefinir propiedad globaljmeter -Gusers=100 (for remote servers)
-DDefinir propiedad del sistemajmeter -Dhttp.proxyHost=proxy.com
-LEstablecer nivel de logjmeter -Lorg.apache.jmeter=DEBUG
-pArchivo de propiedadesjmeter -p custom.properties
-qArchivo de propiedades adicionaljmeter -q env.properties
-XSalir de servidores remotosjmeter -n -t test.jmx -r -X