Guia Completo para Iniciantes: Como Usar o JMeter para Testes de Carga

  1. Instalação do JMeter no Ambiente Local

O JMeter é uma ferramenta de código aberto desenvolvida pela Apache Foundation, amplamente utilizada para testes de performance e carga em aplicações web. Acesse a documentação oficial em jmeter.apache.org para informações adicionais.

1.1 Download e Instalação

Faça o download dos binários no endereço: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/

Escolha uma versão estável (recomendadas as versões 5.x) e baixe o arquivo compactado. Após extrair o conteúdo, navegue até o diretório bin e execute o comando jmeter (Linux/Mac) ou jmeter.bat (Windows) para iniciar a aplicação.

1.2 Alterando o Idioma

Por padrão, a interface do JMeter está em inglês. Para modificar para português:

  • Acesse o menu Options
  • Selecione Choose Language
  • Clique em Portuguese (Brazil) ou Portuguese

1.3 Instalação de Plugins Essenciais

O JMeter possui plugins nativos limitados. Para расширение funcionalidades, especialmente para testes de carga graduais, siga estes passos:

  1. Baixe o arquivo JMeterPlugins-Manager.jar do repositório oficial
  2. Copie o arquivo para o diretório /lib/ext dentro da pasta de instalação do JMeter
  3. Reinicie o JMeter
  4. Acesse OptionsPlugins Manager
  5. Na aba Available Plugins, pesquise e instale os plugins desejados

Recomenda-se instalar plugins relacionados ao jpgc (JPEG Graphics Controller), que permitem criar cenários de carga progressiva (ramp-up). O plugin Stepping Thread Group é particularmente útil para simular diferentes padrões de acesso.

1.4 Configuração da Memória Heap do JMeter

Como o JMeter é uma aplicação Java, seu desempenho depende diretamente da memória heap alocada. Para servidores de teste, recomenda-se aumentar a memória disponível.

Edite o arquivo jmeter (Mac/Linux) ou jmeter.bat (Windows) e localize a linha de configuração heap:

${HEAP:="-Xms1g -Xmx8g -XX:MaxMetaspaceSize=656m"}

Ajuste os valores conforme a capacidade do seu equipamento:

  • -Xms: Memória inicial alocada
  • -Xmx: Memória máxima alocada
  • -XX:MaxMetaspaceSize: Espaço para metadados de classes

Para verificar se a configuração foi aplicada corretamente, utilize a ferramenta jconsole para conectar ao processo JMeter e verificar os parâmetros JVM, ou utilize os comandos jps e jmap.

  1. Componentes Fundamentais do JMeter

2.1 Test Plan (Plano de Teste)

Ao iniciar o JMeter, você verá a interface principal contendo um Test Plan padrão. Este plano representa o arquivo .jmx que contém todas as configurações do teste de carga.

Funcionalidades importantes:

  • Salvar/Exportar: Permite salvar o plano de teste para uso posterior
  • Importar: Possibilita carregar planos de teste existentes

Informações de Erro

O triângulo no canto superior direito exibe mensagens de erro e status da execução. Caso o teste não execute corretamente, clique neste ícone para identificar problemas.

User Defined Variables (Variáveis Globais)

Configure variáveis globais que serão utilizadas em todo o teste. Esta abordagem facilita a manutenção, pois você altera o valor em um único lugar.

Exemplo prático: defina uma variável host com o valor api.exemplo.com. NosRequests subsequentes, utilize a sintaxe ${host} para referenciar este valor.

2.2 Configuration Elements (Elementos de Configuração)

Estes componentes definem parâmetros padrão para as requisições do teste.

2.2.1 HTTP Request Defaults

Caminho: Clique com botão direito no Test Plan → Add → Config Element → HTTP Request Defaults

Finalidade: Define valores padrão para todas as requisições HTTP do teste. Isso elimina a necessidade de configurar repetidamente os mesmos parâmetros.

Configure o protocolo (http/https), hostname e outras propriedades comuns. Use variáveis globais como ${host} para o domínio.

2.2.2 HTTP Header Manager

Caminho: Clique com botão direito no Test Plan → Add → Config Element → HTTP Header Manager

Finalidade: Gerencia cabeçalhos HTTP que serão enviados em todas as requisições.

Configure cabeçalhos frequentes como:

  • Content-Type: Define o tipo de conteúdo (ex: application/json)
  • Cookie: Necessário para testes em endpoints autenticados

2.2.3 CSV Data Set Config

Caminho: Clique com botão direito no Test Plan → Add → Config Element → CSV Data Set Config

Finalidade: Permite ler dados de arquivos CSV para simular diferentes parâmetros em cada requisição.

Configuração:

  • Specify CSV file path: Caminho do arquivo CSV
  • Variable Names: Nomes das colunas (separados por vírgula)
  • Ignore first line: Marque se a primeira linha contém cabeçalhos

NosRequests, utilize as variáveis com a sintaxe ${nomeVariavel}.

2.3 Thread Groups (Grupos de Threads)

Os thread groups controlam a simulação de usuários concorrentes. Cada thread representa um usuário virtual executando requisições simultaneamente.

2.3.1 Thread Group Padrão

Caminho: Clique com botão direito no Test Plan → Add → Thread → Thread Group

Configurações principais:

  • Number of Threads: Quantidade de usuários virtuais (concorrências)
  • Ramp-up Period: Tempo para iniciar todas as threads
  • Loop Count: Número de execuções (-1 para infinito)

Fórmula: Total de Requisições = Number of Threads × Loop Count

Este modo mantém uma carga constante durante todo o período de teste.

2.3.2 Stepping Thread Group (Grupo de Threads Progressivo)

Caminho: Clique com botão direito no Test Plan → Add → Thread → jp@gc - Stepping Thread Group

Finalidade: Cria cenários de carga mais complexos, simulando padrões reais de acesso.

Parâmetros principais:

  • This group will start: Total máximo de threads
  • First, wait for: Tempo inicial antes de iniciar
  • Then start: Threads iniciadas na primeira etapa
  • Next, add: Threads adicionadas a cada ciclo
  • Threads every: Intervalo entre adições de threads
  • Using ramp-up: Tempo para cada adição de thread
  • Then hold load for: Tempo para manter carga máxima
  • Finally, stop: Threads removidas por ciclo

Este componente cria um padrão de "pico" de carga, ideal para identificar pontos de saturação.

2.4 Samplers (Amostradores)

Samplers definem as requisições que serão executadas. O mais utilizado é o HTTP Request.

HTTP Request Sampler

Caminho: Clique com botão direito no Thread Group → Add → Sampler → HTTP Request

Configuração:

  • Server Name or IP: Domínio ou IP do servidor
  • Port Number: Porta do serviço
  • Path: Caminho do endpoint
  • Method: GET, POST, PUT, DELETE, etc.
  • Parameters: Parâmetros da requisição
  1. Exemplos Práticos de Testes de Carga

3.1 Teste de Carga Básico - Hello World

Cenário: API com tempo de processamento de 500ms

Exemplo de endpoint simulado:

@GetMapping("/api/teste")
public String executarTeste() {
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    return "sucesso";
}

Passo 1 - Configurar Thread Group

  • Adicione um Thread Group ao Test Plan
  • Configure 100 threads
  • Defina ramp-up de 60 segundos
  • Loop count: 600

Passo 2 - Configurar HTTP Request

  • Adicione um HTTP Request ao Thread Group
  • Configure o servidor, porta e path
  • Defina o método GET

Passo 3 - Adicionar Listeners para Monitoramento

  • View Results Tree: Exibe detalhes de cada requisição (clique direito → Add → Listener → View Results Tree)
  • Summary Report: Estatísticas consolidadas do teste (Add → Listener → Summary Report)
  • Transactions per Second: Gráfico tempo real de throughput (requisições/segundo)
  • Response Times Over Time: Gráfico de tempos de resposta
  • Active Threads Over Time: Monitora comportamento das threads

Passo 4 - Executar o Teste

Clique com botão direito no Thread Group → Start

Interpretação dos Resultados:

  • Samples: Total de requisições executadas
  • Average: Tempo médio de resposta em milissegundos
  • Min/Max: Tempo mínimo e máximo de resposta
  • Error %: Percentual de falhas
  • Throughput: Requisições processadas por segundo

3.2 Simulando Diferentes Parâmetros de Requisição

Passo 1 - Criar arquivo CSV

userId,userName
1,Maria Silva
2,João Santos
3,Pedro Oliveira

Passo 2 - Configurar CSV Data Set Config

  • Adicione o componente ao Test Plan
  • Specify CSV file: caminho do arquivo criado
  • Variable names: userId,userName
  • Recycle on EOF: True
  • Stop thread on EOF: False

Passo 3 - Utilizar variáveis no HTTP Request

Nos parâmetros da requisição, utilize ${userId} e ${userName}. O JMeter lerá automaticamente diferentes valores do arquivo CSV para cada requisição.

3.3 Testando Endpoints Autenticados

Se a API utiliza autenticação baseada em cookies:

  1. Adicione um HTTP Header Manager ao Test Plan
  2. Adicione o cabeçalho Cookie
  3. Insira o valor do cookie de sessão

Nota: Quando o cookie expirar, será necessário atualizar manualmente o valor.

3.4 Enviando Arquivos via API

No HTTP Request:

  • Selecione a opção File Upload
  • No campo File Path, informe o caminho do arquivo
  • No campo Parameter Name, digite "file" (ou conforme a API exigir)
  • Configure o MIME Type: geralmente application/octet-stream ou multipart/form-data

Para simular envio de diferentes arquivos, utilize a mesma abordagem do CSV, criando uma variável para o caminho do arquivo.

3.5 Executando Testes via Linha de Comando (Modo Não-GUI)

Para testes em servidores, utilize o modo CLI (non-GUI) para melhor desempenho:

jmeter -n -t [arquivo.jmx] -l [arquivo_resultados] -e -o [pasta_relatorio]

Parâmetros:

  • -n: Modo não-GUI
  • -t: Especifica o arquivo de teste (.jmx)
  • -l: Arquivo para armazenar resultados
  • -e: Gera relatório após execução
  • -o: Pasta para o relatório HTML

Exemplo de execução:

jmeter -n -t plano_teste.jmx -l resultado.txt -o relatorio

Após a execução, abra o arquivo index.html gerado na pasta de relatório para visualizar os resultados em formato visual.

Alternativa: Gerar relatório separadamente

jmeter -g resultado.txt -o pasta_saida

Para visualizar detalhes de requisições específicas no formato da interface gráfica, utilize a função "Browse" do listener "View Results Tree" e importe o arquivo de resultados.

Tags: JMeter testes-carga performance apache testes-automatizados

Publicado em 6-23 18:27