Apache JMeter Cheatsheet
Apache JMeter Cheatsheet
Instalação
| Plataforma | 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 | Descrição |
|---|---|
jmeter | Iniciar GUI do JMeter |
jmeter -t test-plan.jmx | Abrir plano de teste específico na GUI |
jmeter -n -t test.jmx -l results.jtl | Executar teste em modo não-GUI com resultados |
jmeter -n -t test.jmx -l results.jtl -e -o report/ | Execute teste e gerar dashboard HTML |
jmeter --version or jmeter -v | Exibir versão do JMeter |
jmeter --help or jmeter -h | Mostrar ajuda e opções disponíveis |
jmeter -? | Listar todas as propriedades disponíveis |
jmeter -n -t test.jmx -j jmeter.log | Executar teste com arquivo de log personalizado |
jmeter -g results.jtl -o dashboard/ | Gerar relatório HTML a partir de resultados existentes |
jmeter -p custom.properties | Iniciar com arquivo de propriedades personalizado |
jmeter -Xmx4g | Iniciar com tamanho de heap aumentado (4GB) |
jmeter-server | Inicie o JMeter em modo de servidor para teste distribuído |
jmeter -n -t test.jmx -l results.csv | Execute teste e salve os resultados como CSV |
jmeter -n -t test.jmx -l results.xml | Execute teste e salve os resultados como XML |
jmeter -Jusers=100 | Substituir valor de propriedade em tempo de execução |
Uso Avançado
| Comando | Descrição |
|---|---|
jmeter -n -t test.jmx -r | Executar teste em todos os servidores remotos |
jmeter -n -t test.jmx -R server1:1099,server2:1099 | Executar teste em servidores remotos específicos |
jmeter -n -t test.jmx -Gusers=100 -Grampup=60 | Definir propriedades globais para servidores remotos |
jmeter -n -t test.jmx -r -X | Executar teste distribuído e sair dos servidores remotos após |
jmeter -n -t test.jmx -q env.properties -q users.properties | Use múltiplos arquivos de propriedades |
jmeter -H proxy.example.com -P 8080 | Executar com proxy HTTP |
jmeter -H proxy.com -P 8080 -u username -a password | Executar com proxy autenticado |
jmeter -Lorg.apache.jmeter=DEBUG | Definir nível de log para DEBUG |
jmeter -Lorg.apache.jmeter.protocol.http=DEBUG | Definir nível de log para pacote específico |
jmeter-server -Djava.rmi.server.hostname=192.168.1.100 | Iniciar servidor com hostname específico |
jmeter-server -Dserver_port=1099 | Iniciar servidor em porta personalizada |
jmeter -n -t test.jmx -Jsummariser.interval=30 | Definir intervalo de resumo para 30 segundos |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xml | Forçar formato de saída XML |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=true | Incluir dados de resposta nos resultados |
jmeter -XX:+UseG1GC -n -t test.jmx | Executar com o coletor de lixo G1 |
jmeter -Dcom.sun.management.jmxremote -n -t test.jmx | Habilitar monitoramento JMX |
jmeter -Dhttp.keepAlive=false -n -t test.jmx | Desativar HTTP keep-alive |
jmeter -g results.jtl -o dashboard/ -f | Forçar sobrescrever dashboard existente |
| `jmeter -N “localhost | *.internal.com”` |
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesis | Instalar plugins do JMeter via CLI |
Configuração
Arquivo de Propriedades do 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
Arquivo de Propriedades do Usuário (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
Propriedades do 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
Configuração da 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"
Configuração de Teste Distribuído
# 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 Comuns
Caso de Uso 1: Teste de Carga Básico com Relatório 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: Teste de Carga Distribuído em Múltiplos 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: Teste de Desempenho de API com Múltiplos Ambientes
# 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: Integração de 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: Teste de Desempenho de Banco de Dados
# 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/
Melhores Práticas
-
Sempre use o modo não-GUI para testes reais: O modo GUI consome recursos significativos e afeta a precisão do teste. Use
jmeter -npara todos os testes de desempenho. -
Alocar memória heap suficiente: Defina o tamanho da heap da JVM para pelo menos 25% da RAM disponível. Para testes grandes:
export JVM_ARGS="-Xms2g -Xmx4g -XX:+UseG1GC" -
Use CSV format for result files: O formato CSV é mais eficiente que XML. Desative a coleta de dados desnecessários para reduzir a sobrecarga:
jmeter.save.saveservice.response_data=false -
Implementar períodos de ramp-up adequados: Evite iniciar todas as threads simultaneamente. Use ramp-up gradual (tipicamente 10-20% da duração do teste) para simular padrões de carga realistas.
-
Aproveite testes distribuídos para cargas altas: Limitações de uma única máquina podem distorcer resultados. Use múltiplos servidores JMeter para testes que excedam 500-1000 threads.
-
Parametrize dados de teste: Use CSV Data Set Config ou variáveis em vez de valores hardcoded. Isso permite configuração de teste fácil e alternância de ambiente.
-
Monitore recursos do sistema durante os testes: Acompanhe CPU, memória, rede e I/O de disco em máquinas JMeter e sistemas de destino. Alto uso de recursos no JMeter indica gargalos na execução do teste.
-
Controle de versão de planos de teste: Armazene
.jmxarquivos e arquivos de propriedades no Git. Use mensagens de commit significativas e marque lançamentos para reprodutibilidade. -
Implemente correlação e asserções adequadas: Extraia valores dinâmicos (tokens, IDs de sessão) e valide respostas. Não apenas meça velocidade—verifique a correção.
-
Limpe entre execuções de teste: Limpe diretórios de resultados e logs. Redefina o estado da aplicação quando necessário para garantir condições de teste consistentes.
Resolução de Problemas
| Problema | Solução |
|---|---|
| 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 | Garantir ramp-up adequado, limpar cache/cookies entre execuções, verificar estabilidade da rede, verificar carga do sistema de destino |
| 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 | Desativar listeners no modo não-GUI, reduzir complexidade de asserções, otimizar expressões regulares, usar extratores eficientes |
| ”Non HTTP response code: java.net.SocketException” | Aumentar valores de timeout, verificar configurações do pool de conexões, verificar capacidade do sistema de destino, reduzir contagem de threads |
| Distributed test results incomplete | Garantir que todos os servidores tenham a mesma versão do plano de teste, verificar a conectividade de rede, confirmar a sincronização de relógio entre os servidores |
| High CPU on JMeter machine | Reduza a contagem de threads, desative processadores/listeners desnecessários, use samplers mais simples, considere testes distribuídos |
| Cannot install plugins | Download Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings |
| Results file corrupted or empty | Verifique espaço em disco suficiente, verifique permissões de arquivo, confirme que o processo do JMeter foi concluído com sucesso |
| ”Address already in use” error | Change server port: jmeter-server -Dserver_port=1100, kill existing JMeter processes, wait for port release |
Referência Rápida: Opções de Linha de Comando
| Opção | Descrição | Exemplo |
|---|---|---|
-n | Modo não-GUI | jmeter -n -t test.jmx |
-t | Arquivo de plano de teste | jmeter -t mytest.jmx |
-l | Arquivo de log de resultados | jmeter -n -t test.jmx -l results.jtl |
-j | Arquivo de log do JMeter | jmeter -n -t test.jmx -j jmeter.log |
-r | Executar em todos os servidores remotos | jmeter -n -t test.jmx -r |
-R | Executar em servidores específicos | jmeter -n -t test.jmx -R server1,server2 |
-g | Gerar relatório a partir do arquivo | jmeter -g results.jtl -o report/ |
-e | Gerar relatório após teste | jmeter -n -t test.jmx -l results.jtl -e -o report/ |
-o | Pasta de saída para relatório | jmeter -g results.jtl -o dashboard/ |
-H | Host proxy | jmeter -H proxy.com -P 8080 |
-P | Porta proxy | jmeter -H proxy.com -P 8080 |
-u | Nome de usuário do proxy | jmeter -H proxy.com -P 8080 -u user |
-a | Senha de proxy | jmeter -H proxy.com -P 8080 -a pass |
-J | Definir propriedade JMeter | jmeter -Jusers=100 -Jrampup=60 |
-G | Definir propriedade global | jmeter -Gusers=100 (for remote servers) |
-D | Definir propriedade do sistema | jmeter -Dhttp.proxyHost=proxy.com |
-L | Definir nível de log | jmeter -Lorg.apache.jmeter=DEBUG |
-p | Ficheiro de propriedades | jmeter -p custom.properties |
-q | Arquivo de propriedade adicional | jmeter -q env.properties |
-X | Sair de servidores remotos | jmeter -n -t test.jmx -r -X |