Pular para o conteúdo

Apache JMeter Cheatsheet

Apache JMeter Cheatsheet

Instalação

PlataformaComando
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

ComandoDescrição
jmeterIniciar GUI do JMeter
jmeter -t test-plan.jmxAbrir plano de teste específico na GUI
jmeter -n -t test.jmx -l results.jtlExecutar 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 -vExibir versão do JMeter
jmeter --help or jmeter -hMostrar ajuda e opções disponíveis
jmeter -?Listar todas as propriedades disponíveis
jmeter -n -t test.jmx -j jmeter.logExecutar teste com arquivo de log personalizado
jmeter -g results.jtl -o dashboard/Gerar relatório HTML a partir de resultados existentes
jmeter -p custom.propertiesIniciar com arquivo de propriedades personalizado
jmeter -Xmx4gIniciar com tamanho de heap aumentado (4GB)
jmeter-serverInicie o JMeter em modo de servidor para teste distribuído
jmeter -n -t test.jmx -l results.csvExecute teste e salve os resultados como CSV
jmeter -n -t test.jmx -l results.xmlExecute teste e salve os resultados como XML
jmeter -Jusers=100Substituir valor de propriedade em tempo de execução

Uso Avançado

ComandoDescrição
jmeter -n -t test.jmx -rExecutar teste em todos os servidores remotos
jmeter -n -t test.jmx -R server1:1099,server2:1099Executar teste em servidores remotos específicos
jmeter -n -t test.jmx -Gusers=100 -Grampup=60Definir propriedades globais para servidores remotos
jmeter -n -t test.jmx -r -XExecutar teste distribuído e sair dos servidores remotos após
jmeter -n -t test.jmx -q env.properties -q users.propertiesUse múltiplos arquivos de propriedades
jmeter -H proxy.example.com -P 8080Executar com proxy HTTP
jmeter -H proxy.com -P 8080 -u username -a passwordExecutar com proxy autenticado
jmeter -Lorg.apache.jmeter=DEBUGDefinir nível de log para DEBUG
jmeter -Lorg.apache.jmeter.protocol.http=DEBUGDefinir nível de log para pacote específico
jmeter-server -Djava.rmi.server.hostname=192.168.1.100Iniciar servidor com hostname específico
jmeter-server -Dserver_port=1099Iniciar servidor em porta personalizada
jmeter -n -t test.jmx -Jsummariser.interval=30Definir intervalo de resumo para 30 segundos
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xmlForçar formato de saída XML
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=trueIncluir dados de resposta nos resultados
jmeter -XX:+UseG1GC -n -t test.jmxExecutar com o coletor de lixo G1
jmeter -Dcom.sun.management.jmxremote -n -t test.jmxHabilitar monitoramento JMX
jmeter -Dhttp.keepAlive=false -n -t test.jmxDesativar HTTP keep-alive
jmeter -g results.jtl -o dashboard/ -fForçar sobrescrever dashboard existente
`jmeter -N “localhost*.internal.com”`
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesisInstalar 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

ProblemaSolução
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 runsGarantir ramp-up adequado, limpar cache/cookies entre execuções, verificar estabilidade da rede, verificar carga do sistema de destino
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 executionDesativar 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 incompleteGarantir 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 machineReduza a contagem de threads, desative processadores/listeners desnecessários, use samplers mais simples, considere testes distribuídos
Cannot install pluginsDownload Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings
Results file corrupted or emptyVerifique 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” errorChange 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çãoDescriçãoExemplo
-nModo não-GUIjmeter -n -t test.jmx
-tArquivo de plano de testejmeter -t mytest.jmx
-lArquivo de log de resultadosjmeter -n -t test.jmx -l results.jtl
-jArquivo de log do JMeterjmeter -n -t test.jmx -j jmeter.log
-rExecutar em todos os servidores remotosjmeter -n -t test.jmx -r
-RExecutar em servidores específicosjmeter -n -t test.jmx -R server1,server2
-gGerar relatório a partir do arquivojmeter -g results.jtl -o report/
-eGerar relatório após testejmeter -n -t test.jmx -l results.jtl -e -o report/
-oPasta de saída para relatóriojmeter -g results.jtl -o dashboard/
-HHost proxyjmeter -H proxy.com -P 8080
-PPorta proxyjmeter -H proxy.com -P 8080
-uNome de usuário do proxyjmeter -H proxy.com -P 8080 -u user
-aSenha de proxyjmeter -H proxy.com -P 8080 -a pass
-JDefinir propriedade JMeterjmeter -Jusers=100 -Jrampup=60
-GDefinir propriedade globaljmeter -Gusers=100 (for remote servers)
-DDefinir propriedade do sistemajmeter -Dhttp.proxyHost=proxy.com
-LDefinir nível de logjmeter -Lorg.apache.jmeter=DEBUG
-pFicheiro de propriedadesjmeter -p custom.properties
-qArquivo de propriedade adicionaljmeter -q env.properties
-XSair de servidores remotosjmeter -n -t test.jmx -r -X