Saltar a contenido

Hoja de Referencia de Apache JMeter

Instalación

Platform Comando
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"

Comandos Básicos

Comando Descripción
jmeter Iniciar GUI de JMeter
jmeter -t test-plan.jmx Abrir plan de pruebas específico en GUI
jmeter -n -t test.jmx -l results.jtl Ejecutar 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 -v Mostrar versión de JMeter
jmeter --help or jmeter -h Mostrar ayuda y opciones disponibles
jmeter -? Listar todas las propiedades disponibles
jmeter -n -t test.jmx -j jmeter.log Ejecutar prueba con archivo de registro personalizado
jmeter -g results.jtl -o dashboard/ Generar informe HTML a partir de resultados existentes
jmeter -p custom.properties Lanzar con archivo de propiedades personalizado
jmeter -Xmx4g Lanzar con tamaño de heap aumentado (4GB)
jmeter-server Iniciar JMeter en modo servidor para pruebas distribuidas
jmeter -n -t test.jmx -l results.csv Ejecutar prueba y guardar resultados como CSV
jmeter -n -t test.jmx -l results.xml Ejecutar prueba y guardar resultados como XML
jmeter -Jusers=100 Anular el valor de la propiedad en tiempo de ejecución
Comando Descripción
jmeter -n -t test.jmx -r Ejecutar prueba en todos los servidores remotos
jmeter -n -t test.jmx -R server1:1099,server2:1099 Ejecutar prueba en servidores remotos específicos
jmeter -n -t test.jmx -Gusers=100 -Grampup=60 Establecer propiedades globales para servidores remotos
jmeter -n -t test.jmx -r -X Ejecutar pruebas distribuidas y salir de servidores remotos después
jmeter -n -t test.jmx -q env.properties -q users.properties Usar múltiples archivos de propiedades
jmeter -H proxy.example.com -P 8080 Ejecutar con proxy HTTP
jmeter -H proxy.com -P 8080 -u username -a password Ejecutar con proxy autenticado
jmeter -Lorg.apache.jmeter=DEBUG Establecer nivel de log a DEBUG
jmeter -Lorg.apache.jmeter.protocol.http=DEBUG Establecer nivel de registro para paquete específico
jmeter-server -Djava.rmi.server.hostname=192.168.1.100 Iniciar servidor con nombre de host específico
jmeter-server -Dserver_port=1099 Iniciar servidor en puerto personalizado
jmeter -n -t test.jmx -Jsummariser.interval=30 Establecer intervalo de resumen en 30 segundos
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xml Forzar formato de salida XML
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=true Incluir datos de respuesta en resultados
jmeter -XX:+UseG1GC -n -t test.jmx Ejecutar con el recolector de basura G1
jmeter -Dcom.sun.management.jmxremote -n -t test.jmx Habilitar monitoreo JMX
jmeter -Dhttp.keepAlive=false -n -t test.jmx Deshabilitar HTTP keep-alive
jmeter -g results.jtl -o dashboard/ -f Forzar sobrescritura del dashboard existente
jmeter -N "localhost | *.internal.com" Establecer hosts sin proxy
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesis Instalar 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

Problema Solución
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 Asegú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 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 Deshabilitar 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 incomplete Asegú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 machine Reducir el recuento de hilos, deshabilitar procesadores/listeners innecesarios, usar muestreadores más simples, considerar pruebas distribuidas
Cannot install plugins Download Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings
Results file corrupted or empty Asegú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" error Change 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ón Descripción Ejemplo
-n Modo sin interfaz gráfica jmeter -n -t test.jmx
-t Archivo de plan de pruebas jmeter -t mytest.jmx
-l Archivo de registro de resultados jmeter -n -t test.jmx -l results.jtl
-j Archivo de registro de JMeter jmeter -n -t test.jmx -j jmeter.log
-r Ejecutar en todos los servidores remotos jmeter -n -t test.jmx -r
-R Ejecutar en servidores específicos jmeter -n -t test.jmx -R server1,server2
-g Generar informe desde archivo jmeter -g results.jtl -o report/
-e Generar informe después de la prueba jmeter -n -t test.jmx -l results.jtl -e -o report/
-o Carpeta de salida para informe jmeter -g results.jtl -o dashboard/
-H Host proxy jmeter -H proxy.com -P 8080
-P Puerto proxy jmeter -H proxy.com -P 8080
-u Nombre de usuario de proxy jmeter -H proxy.com -P 8080 -u user
-a Contraseña de proxy jmeter -H proxy.com -P 8080 -a pass
-J Definir propiedad de JMeter jmeter -Jusers=100 -Jrampup=60
-G Definir propiedad global jmeter -Gusers=100 (for remote servers)
-D Definir propiedad del sistema jmeter -Dhttp.proxyHost=proxy.com
-L Establecer nivel de log jmeter -Lorg.apache.jmeter=DEBUG
-p Archivo de propiedades jmeter -p custom.properties
-q Archivo de propiedades adicional jmeter -q env.properties
-X Salir de servidores remotos jmeter -n -t test.jmx -r -X