1. Breve introdução
O Apache JMeter é uma ferramenta de teste de estresse baseada em Java desenvolvida pela organização Apache. Usado para software de teste de estresse, foi originalmente projetado para teste de aplicativos da web, mas posteriormente expandido para outras áreas de teste. Ele pode ser usado para testar recursos estáticos e dinâmicos, como arquivos estáticos, servlets Java, scripts CGI, objetos Java, bancos de dados, servidores FTP e muito mais. O JMeter pode ser usado para simular grandes cargas em servidores, redes ou objetos, para testar sua força e analisar o desempenho geral em diferentes categorias de estresse. Além disso, o JMeter permite testes funcionais/de regressão de aplicativos criando scripts com asserções para verificar se seu programa retorna os resultados esperados. Para máxima flexibilidade, o JMeter permite o uso de expressões regulares para criar asserções.
2. Baixe e instale
Como o Jmeter é desenvolvido com base em java, primeiro você precisa baixar e instalar o JDK e configurar as variáveis de ambiente. O requisito mínimo do JMeter é o Java 8, que é compatível com versões superiores. O site oficial recomenda o uso da versão mínima necessária.
Endereço de download do site oficial do Jmeter: https://jmeter.apache.org/download_jmeter.cgi
Baixar Jmeter
Após a conclusão do download, descompacte o pacote zip, localize o diretório bin e apache-jmeter-5.2.1\bin\jmeter.bat
clique duas vezes para iniciar o Jmeter
Iniciar Jmeter
- Nota: Haverá duas janelas quando for aberto, a janela de comando do Jmeter e a interface gráfica de operação do Jmeter, e a janela de comando não pode ser fechada.
Interface aproximada
3. Configurações básicas
Mudança de idioma do Jmeter
- Método temporário : clique em
Options
→Choose Language
→Chinese(Simplified)
para alternar para chinês simplificado, apenas neste momento, após fechar o Jmeter, a próxima inicialização restaurará o idioma padrão.
mudar de idioma
- Método permanente : abra o diretório bin no arquivo descompactado do Jmeter, localize
jmeter.properties
o arquivo e abra-o com um editor,#language=en
insira uma linha abaixolanguage=zh_CN
, salve após a modificação e reinicie o Jmeter. A interface padrão é exibida em chinês simplificado.
Modificar idioma padrão
Modifique a codificação padrão do Jmeter para utf-8 para resolver caracteres distorcidos do console
-
Abra o diretório bin no arquivo descompactado do Jmeter, encontre
jmeter.properties
o arquivo e abra-o com um editor -
existir
#The encoding to be used if none is provided (default ISO-8859-1)、#sampleresult.default.encoding=ISO-8859-1
-
Insira uma linha abaixo
The encoding to be used if none is provided (default utf-8)、sampleresult.default.encoding=utf-8
-
Salve e reinicie o Jmeter após a modificação
modificar código
4. Escrever scripts de teste de projeto
4.1. Adicionar grupo de tópicos
- Clique com o botão direito em "Test Plan" → "Add" → "Thread (User)" → "Thread Group"
novo grupo de discussão
- Configurar parâmetros do grupo de threads
configuração
Explicação detalhada dos principais parâmetros do grupo de roscas:
-
Número de threads: número de usuários virtuais. Um usuário virtual ocupa um processo ou thread. Quantas visitas de usuário simuladas preencherão o número de threads.
-
Tempo de aceleração (segundos): Quanto tempo leva para os usuários virtuais configurados inicializarem. Se o número de threads for
100
, e o tempo de preparação for5
, então leva 1 thread5
por segundo para iniciar , ou seja, 1 thread por segundo. Equivale a simular 1 acesso de usuário por segundo, e zerar é o que entendo como acesso simultâneo.100
20
20
-
Número de loops: Se o número de threads for
100
, o número de loops será100
. Então o número total de solicitações é100*100=10000
. Se "Forever" estiver marcado, todos os threads continuarão enviando solicitações até que você opte por parar de executar o script.
4.2. Adicionar interface de teste
- Clique com o botão direito em "Your Thread Group" → "Add" → "Samplers" → "HTTP Requests"
adicionar solicitação
Spring-boot
Preencha os parâmetros de solicitação da interface, testarei o serviço local aqui (o código-fonte de demonstração usado neste tutorial está no final do artigo), você pode consultar a figura a seguir para preencher:
Preencha a interface
Explicação detalhada dos principais parâmetros da requisição Http (quem já fez testes de interface deve começar rapidamente):
-
Protocolo: envie o protocolo de solicitação HTTP para o servidor de destino, pode ser
HTTP
ouHTTPS
, o padrão éHTTP
. -
Nome ou IP do servidor:
HTTP
o nome do servidor de destino ouIP
. -
Número da porta: O número da porta do servidor de destino, o valor padrão é 80
-
Método:
HTTP
o método de envio da solicitação, os métodos disponíveis incluemGET
,POST
,HEAD
,PUT
,OPTIONS
,TRACE
,DELETE
etc. -
Caminho:
URL
caminho de destino (URL
a parte restante após a remoção do endereço do servidor, porta e parâmetros). -
Codificação de conteúdo: Método de codificação, o padrão é
ISO-8859-1
codificação e é configurado aquiutf-8
. -
Parâmetros: Envie os parâmetros juntamente com o pedido. Para os parâmetros enviados no pedido
URL
, o utilizador podeURL
definir todos os parâmetros desta tabela, sendo que cada linha da tabela é um parâmetro (correspondente aoURL
dakey=value
tabela). Note que você precisa verificar "codificação" ao passar parâmetros para chinês ".
4.3. Adicionar visualização da árvore de resultados
- Clique com o botão direito em "Your Thread Group" → "Add" → "Listener" → "View Results Tree"
adicionar resultado
- Aqui, modificamos o formato dos dados de resposta (escolha qualquer formato que você retornar, eu retorno json aqui), executamos a solicitação Http e você pode ver os dados de resposta retornados por essa solicitação.
Ver resultados
4.4. Adicionar variáveis definidas pelo usuário
- Adicione variáveis definidas pelo usuário para parametrização da solicitação Http, clique com o botão direito do mouse em "Your Thread Group" → "Add" → "Configuration Components" → "User-Defined Variables":
variável personalizada
- Adicione um parâmetro de nome de usuário (correspondente à sua chave de parâmetro de solicitação real, aqueles que fizeram testes de interface devem entendê-lo)
adicionar variável
- Use este parâmetro na requisição Http, o formato é: ${key}, por exemplo:
usar parâmetros
- Aqui tenho um método para consultar os usuários pelo nome de usuário, então após alterar os parâmetros, o resultado da execução novamente é zero dados do usuário
Veja a árvore de resultados novamente
4.5, asserção json (porque eu retorno json aqui, outros requisitos devem ser selecionados de acordo com a situação real)
- Adicione uma asserção: Clique com o botão direito do mouse em "Sua solicitação HTTP" → "Adicionar" → "Asserção" → "json Assertion"
imagem.png
- Configure o conteúdo específico da asserção json
conteúdo da declaração
- Resultado da asserção: clique com o botão direito do mouse em "Sua solicitação HTTP" → "Adicionar" → "Ouvinte" → "Resultado da asserção"
resultado da afirmação
sucesso de afirmação
Para demonstrar a falha, modifiquei o conteúdo da assertiva para zerar
falha na asserção
4.6. Adicionar relatório de agregação
- Clique com o botão direito em "Your Thread Group" → "Add" → "Listener" → "Aggregate Report" para armazenar o relatório de teste de desempenho
adicionar relatório
Até agora, concluímos um script de teste de interface básico
5. Teste de desempenho
- Para testar o efeito, simulo 100 usuários para acessar e obter dados simultaneamente, fazer um loop 6 vezes e modificar os dados do grupo de threads da seguinte maneira:
Modificar grupo de threads
- Volte para o relatório agregado e execute este teste de estresse
teste de pressão
- Relatório de teste de análise (primeiro deixe este teste de estresse ser executado até a conclusão)
Dados de teste
Explicação detalhada dos parâmetros do relatório de agregação:
-
Label: Cada
JMeter
(element
por exemplo, tenho apenas um aquiSpring WebFlux
) tem umName
atributo, e o valor do atributo é exibido aquiName
. -
Amostras: o número de solicitações - indica quantas solicitações foram enviadas neste teste e simulei
100
um ciclo de usuário6
aqui100*6=600
. -
Average: tempo médio de resposta (unidade:
ms
). O padrão é um únicoRequest
tempo médio de resposta, quando usadoTransaction Controller
, também podeTransaction
exibir o tempo médio de resposta em unidades. -
Median (Mediana): Ou seja,
50%
o tempo de resposta do usuário. -
Percentil 90% (linha):
90%
o tempo de resposta do usuário. Os vizinhos*%
concordaram. -
Min (Min): Tempo mínimo de resposta.
-
Valor máximo (Max): O tempo máximo de resposta.
-
Anormal (erro) %: Taxa de erro - número de solicitações erradas/número total de solicitações.
-
Throughput (Throughput): Throughput - Por padrão, indica o número de requisições concluídas por segundo (
Request per Second
), quando utilizadoTransaction Controller
, também pode indicar umLoadRunner
número semelhanteTransaction per Second
. -
Receber KB/seg: A quantidade de dados recebidos do servidor por segundo, que equivale a KB/
LoadRunner
segThroughput/Sec
. -
Send KB/Seg: A quantidade de dados enviados ao servidor por segundo, que equivale a KB/
LoadRunner
SegThroughput/Sec
.