Mudanças entre as edições de "Guia de testes de desempenho"
(→Configurando um thread group) |
(→Adicionando ouvintes) |
||
Linha 98: | Linha 98: | ||
* Escritor de dados simples | * Escritor de dados simples | ||
* Ver resultados em tabela | * Ver resultados em tabela | ||
+ | ** Tempo da amostra: Tempo total da requisição em m/s. | ||
+ | ** Estado: Mostra se a requisição foi executada com sucesso ou se houve falhas. | ||
+ | ** Bytes: Quantidade de dados retornados pelo servidor. | ||
+ | ** Latency: Diferença entre o tempo que a requisição foi enviada e a hora em que a resposta foi recebida. | ||
====Analisando cabeçalhos/requisições/respostas HTTP com Árvore de resultados==== | ====Analisando cabeçalhos/requisições/respostas HTTP com Árvore de resultados==== |
Edição das 17h16min de 6 de dezembro de 2016
Versão 0.2 de 06/12/2016. Documento em construção.
Índice
- 1 Sobre este guia
- 2 Planejamento
- 2.1 Criação de cenários de teste no JMeter
- 2.1.1 Instalando o JMeter
- 2.1.2 Instalando plugins
- 2.1.3 Iniciando o JMeter
- 2.1.4 Configurando um thread group
- 2.1.5 Adicionando elementos de configuração
- 2.1.6 Adicionando testadores
- 2.1.7 Gravação de cenários utilizando proxy
- 2.1.8 Adicionando ouvintes
- 2.1.9 Analisando cabeçalhos/requisições/respostas HTTP com Árvore de resultados
- 2.1.10 Realizando extrações com RegExp
- 2.1.11 Configurando vazão e tempo de resposta variável
- 2.1.12 Tratando condicionais
- 2.1 Criação de cenários de teste no JMeter
- 3 Preparação do ambiente
- 4 Pré-execução
- 5 Execução dos testes
- 6 Análise dos resultados
- 7 Reexecução
Sobre este guia
Este guia visa reunir informações úteis para o aprendizado de testes de desempenho, bem como a utilização das ferramentas necessárias (JMeter, etc.).
Planejamento
A etapa de planejamento visa levantar as necessidades do projeto em relação ao teste de desempenho. Entre as questões a serem respondidas, estão:
- Qual o objetivo do teste?
- Qual pergunta deve ser respondida com o resultado do teste?
- Qual tipo de teste deve ser executado? Desempenho, Stress, Carga?
- Quais serão os cenários?
- Quais os prazos?
- Os cenários definidos são compatíveis com os prazos?
Criação de cenários de teste no JMeter
O JMeter é uma ferramenta opensource, desenvolvida para criar e executar testes de carga em serviços computacionais. Para a elaboração dos planos de teste, o Jmeter pode te ajudar em:
- Configurar diversos tipos de requisição;
- Criar loops e condições lógicas para cada requisição;
- Importar dados para o plano através de arquivo .csv
- Simular ataque ao servidor
Instalando o JMeter
O JMeter está disponível para download gratuito em http://jmeter.apache.org/download_jmeter.cgi
Instalando plugins
O JMeter possui diversos plugins. Estes plugins podem, pode exemplo, oferecer suporte ao JUnit, MongoDP, webdriver, oferecer novos ouvintes, monitorar servidores, etc. Os plugins estão disponíveis em https://jmeter-plugins.org
Os plugins devem ser instalados na pasta [JMETER_HOME]/lib
Principais plugins:
- Ultimate Thread Group
Iniciando o JMeter
Para abrir a interface do JMeter é necessário executar o arquivo jmeter.bat
, localizado em [JMETER_HOME]/bin
Configurando um thread group
O thread group é o início de qualquer plano de teste. É abaixo dele que ficarão todos os controladores e testadores do plano. Nele podemos estabelecer configurações como: número de usuários (threads), tempo de intervalo para cada usuário (ramp-up period) e o número de vezes que o teste será executado (loop count).
Para adicionarmos o elemento, basta clicar com o botão direito do mouse em cima do Plano de Teste em seguida em Adicionar > Threads (Users) > Grupo de usuários.
- Thread Grupo de usuários
- Número de usuários virtuais: número de usuários simultâneos
- Tempo de inicialização: tempo para subir todos os usuários
- Contador de iteração: quantas vezes os usuários irão executar as ações
- Thread Ultimate Thread Group
- Star Threads Count: número de usuários simultâneos
- Initial delay, sec: tempo de dalay para começar a subir os usuários
- Startup time: tempo para subir todos os usuários
- Hold Load For, sec: tempo de teste
Adicionando elementos de configuração
- Requisição HTTP: Padrões de Requisição HTTP (HTTP Request Defaults), que define valores padrões para as requisições HTTP. Para adicionarmos o elemento, basta clicar com o botão direito do mouse em cima do Plano de Teste em seguida em
Adicionar > Elementos de configuração > Padrões de Requisição HTTP
.
Neste elemento de configuração podemos definir os valores padrões das requisições HTTP que serão adicionadas posteriormente ao teste, como o endereço e a porta, sem necessidade de repetição.
- Gerenciador de cookies: O gerenciador de cookies possibilita o uso de cookies no plano de teste. Para adicionarmos o elemento, basta clicar com o botão direito do mouse em cima do Plano de Teste em seguida em
Adicionar > Elementos de configuração > Gerenciador de Cookie HTTP
.
- Gerenciador de cache: O gerenciador de cache possibilita o uso de cache no plano de teste. Para adicionarmos o elemento, basta clicar com o botão direito do mouse em cima do Plano de Teste e em seguida clicar em
Adicionar > Elementos de configuração > Gerenciador de Cache HTTP
.
Adicionando testadores
1. Requisição HTTP: Nele podemos definir o verbo que será utilizado (POST, GET, PUT, etc.), enviar parâmetros com a requisição, como por exemplo o email e senha de um usuário em um POST.
Para adicionarmos o elemento, basta clicar com o botão direito do mouse em cima do Grupo de usuário em seguida em Adicionar > Testador > Requisição HTTP
.
Atributos para configuração:
- Nome: nome para lembrar a responsabilidade do elemento;
- Nome do servidor ou IP: endereço ou IP que será testado
- Número da porta: porta que o servidor responde
- Protocolo: por default é o HTTP, podendos ser alterado.
- Método: método do HTTP
- Codificação do conteúdo: formato de codificação dos dados.
- Caminho: página acessada complementando o nome do servidor ou IP
- Enviar parâmetros com a requisição: parâmetros enviados no request.
Gravação de cenários utilizando proxy
Adicionando ouvintes
Ouvintes são elementos que capturam e exibem os resultados. Para adicionar um ouvinte ao plano de testes, basta ir até Adicionar > Ouvinte
Principais ouvintes:
- Árvore de resultados
- Relatório agregado
- Escritor de dados simples
- Ver resultados em tabela
- Tempo da amostra: Tempo total da requisição em m/s.
- Estado: Mostra se a requisição foi executada com sucesso ou se houve falhas.
- Bytes: Quantidade de dados retornados pelo servidor.
- Latency: Diferença entre o tempo que a requisição foi enviada e a hora em que a resposta foi recebida.
Analisando cabeçalhos/requisições/respostas HTTP com Árvore de resultados
Realizando extrações com RegExp
Configurando vazão e tempo de resposta variável
Tratando condicionais
Preparação do ambiente
A equipe de desenvolvimento deve enviar o pacote para o DevOps realizar a atualização do ambiente de testes. A equipe do DevOps também pode auxiliar no entendimento da infra do cliente, a fim de simular o cenário ideal de teste.
Pré-execução
A etapa de pré-execução visa realizar as configurações necessárias nos softwares, ambientes e coletores, antes de iniciar o teste. As etapas são:
Preparar o relatório de resultados do JMeter
O JMeter será executado via linha de comando, a fim de que sua GUI não interfira nos contadores. Sendo assim, devemos configurar o ouvinte para salvar o relatório.
- Utilizar o ouvinte Escritor de dados simples
- Inserir um caminho no campo Nome do arquivo
Verificar se o arquivo .jmx é o mesmo no Master e nos Slaves
O arquivo .jmx deve ser o mesmo no Master e nos Slaves do JMeter.
Preparar os coletores do Perfmon nos servidores WEB, SQL e ARR
- Para cada servidor WEB, acessar o Performance Monitor / Data Collector Sets / User Defined / Nome do coletor
- Verificar o caminho onde será salvo o arquivo em cada servidor
- Dar play para começar a gravar e depois dar play no teste
Definir e configurar os Slaves
- Quantos slaves utilizar? Com 50-100 usuários, geralmente 1 slave basta. Ou quando a memória está comprometida em mais de 75%.
- Quais slaves utilizar? No Master, editar o nome dos slaves no arquivo /bin/Jmeter.properties.
Execução dos testes
- Nos slaves, iniciar o arquivo /bin/jmeter.server como admin
- Iniciar a gravação dos contatores do Perfmon em todos os servidores
- No master, iniciar o teste via prompt de comando:
- Navegar no prompt até a pasta bin do JMeter
- Executar o comando:
jmeter.bat -n -t "caminho do arquivo de teste" -l "caminho pro arquivo de log de resultado" -j "caminho pro arquivo de log do jmeter" -r
Análise dos resultados
- Acessar as VMs e coletar os arquivos de resultados do perfmon (WEB, SQL e ARR) e o CSV do JMeter.
- Separar esses arquivos em pastas por quantidade de usuários do teste, para melhor organização
- Rodar o script de Queries mais lentas
- Avg CPI Time (formatado), Tempo decorrido (formatado) e Instrução completa
- Verificar os logs de erro
- Estão em uma tabela do BD
- Em caso de dúvidas, tirar com a equipe de DEV
- Tabular os dados
A análise dos dados deve ser feita com cuidado. Não é possível analisar os contadores separadamente. É necessário analisar todo o contexto do sistema e do ambiente.
Principais contadores
Reexecução
Para realizar nova bateria de testes, com mais usuários por exemplo:
- Restaurar o backup do BD
- Limpar os caches dos sites, se necessário
- Reiniciar o SQL, se necessário - o SQL não desaloca a memória imediatamente após a carga, o que pode impactar nos resultados de outros testes.