Seguindo a sequência do post anterior, Simplificando o uso do JMeter em testes de Performance - API - Parte 1, nesta postagem, abordaremos outros elementos importantes para compor seu script para o teste de performance:
- SetUp Thread Group
- TearDown Thread Group
- Requisição HTTP
- Ouvintes
- Configuração dos Dados CSV
SetUp Thread Group e TearDown Thread Group
SetUp Thread Group
Clique com o botão direito do mouse em Plano de Testes -> Adicionar -> Threads(Users) -> SetUp Thread Group.
Este modo é aplicado quando existe a necessidade de alguma pré-configuração ou pré-condição em seu script, para ser executado antes dos demais grupos de usuários.
Por exemplo, se sua API usar autenticação OAuth, precisará gerar um token. Esse token poderia ser gerado nessa estrutura SetUp Thread Group para garantir que seja executado antes de qualquer outro grupo de usuários.
Essa estrutura tem o mesmo formato do grupo de usuários explicado no post 1, muda só a regra de execução como explicado acima.
Tenho aqui um exemplo de script para gerar token.
TearDown Thread Group
Botão direito em Plano de Testes -> Adicionar -> Threads(Users) -> TearDown Thread Group
Já o TearDown Thread Group, é aplicado quando existe a necessidade de alguma execução em seu script acontecer após a execução de todos os Grupos de Usuários existentes.
Essa estrutura tem o mesmo formato do SetUp Thread Group, muda só a regra de execução como explicado acima.
Requisição HTTP
Já conhecemos os recursos que ajudarão a dar base no teste, agora vamos para a estrutura que de fato realizará a chamada de sua API:
Botão direito em Grupo de Usuário ou SetUp Thread Group ou TearDown Thread Group -> Adicionar -> Testador -> Requisição Http.
- Nome: Informar o nome da API que será chamada
- Requisição HTTP: Selecionar o verbo utilizado na chamada de sua requisição
Dica: Para essas informações mais específicas, utilize a documentação da API para montar a estrutura.
Caminho: Informar o endpoint da API
Obs: Se você utilizou os elementos de configuração não será necessário passar as informações de servidor/porta.
Parâmeters e Body Data, terão preenchimento de acordo com a estrutura da API trabalhada.
Dica: Para preenchimento do request, além da documentação, utilize exemplos que você testou com uma chamada seja via cURL ou Postman e já funcionou.
Ouvintes
Conceito de Ouvintes são relatórios ou representações gráficas no JMeter com informações (métricas) referentes ao processamento de seu script.
Alguns exemplos que são bem utilizados:
Ver Árvore de Resultados
Botão direito em Requisição HTTP -> Adicionar -> Ouvinte -> ver Árvore de Resultados.
Essa estrutura trará informações detalhadas tanto de seu request quanto do response.
É uma ótima pedida quando estiver montando script, para direcionar os ajustes, mas finalizando, mantenha-o desabilitado ou exclua para que os dados para montar esse relatório não gerem overhead que influencie nos seus requests.
Relatório Agregado
É uma ótima opção para uma visão das informações consolidadas. Te dará uma visão da quantidade total de amostras (requests) realizadas, bem como quantidade e percentual de erros, tempos de resposta de acordo com percentis e vazão (Throughput).
Para mais detalhes dos campos do relatório indicarei a leitura desse link.
Massa de Dados
Muitas vezes precisamos de uma massa de dados para passar nos parâmetros da chamada da API, de forma que simule o mais próximo do real possível, que dados não se repitam, como por exemplo:
- Para chamar uma API de cadastro de pedido (compra ou venda)) eu preciso de um cliente/fornecedor
- Para chamar uma API de cadastro de conta corrente preciso do identificador do cliente/titular da conta, etc
Podemos implementar de duas formas:
- Criando mais de um grupo de usuários no Jmeter chamando a API que têm dependência com a principal usando parâmetro entre os grupos de usuários
- Data Driven (CSV)
A primeira opção é possível realizar utilizando JSON Extractor para obter o valor do parâmetro do response desejado e colocar em uma variável, e setar essa variável para uma propriedade de forma que outros grupos de usuários enxerguem.
Veja esse exemplo para esse cenário.
Data Driven
Uma das melhores abordagens para resolver questões de massa de dados com muito volume é o conceito de data driven. Criar CSV com formato de tabela, passando todos os parâmetros que precisaria para sua massa.
Por exemplo: Para aplicar uma variação de cenário de cadastro de produto, para os principais parâmetros, vou montar um CSV onde passo id produto, nome e lote:
Na estrutura do JMeter, cada linha de seu CSV corresponderá a um conjunto de massa de dados que será atribuído como parâmetro dentro do script.
Configuração dos Dados CSV
Botão direito em Plano de Testes -> Adicionar -> Elementos de Configuração -> Configuração dos dados CSV.
Nome do arquivo: Informar o diretório onde o CSV será armazenado.
Dica: Encapsular o diretório em uma variável global e passar a variável concatenada com o nome do arquivo para facilitar a manutenção/mudança de ambiente.
Exemplo:
- Nomes das variáveis (separados por vírgula): Informar o nome de todas variáveis definidas no CSV
- Separador (usar ‘\t’ para tabulações): Informar o separador, mais comum usar vírgula
- Reciclar no final do arquivo (EOF)? Define se ao finalizar o arquivo quer que volte para o início
- Finalizar usuário no final do arquivo? Define se ao finalizar o arquivo as Threads também são finalizadas
Cada variável que foi declarada nessa estrutura poderá ser utilizada para passar um parâmetro no request body, no endpoint, etc.
Dica: Procure trabalhar com um número maior de registros do que de Threads em sua massa de dados, principalmente, para evitar casos de concorrência e correr o risco de o mesmo registro ser utilizado para mais de uma Thread simultaneamente.
Exemplos
Tenho alguns exemplos nesse repositório, baseado no conteúdo dos 2 posts, que pode utilizar para implementar para seu contexto.
Executar por linha de comando
Para executar seus scripts via linha de comando,é bem simples, basta que esteja na pasta Bin do JMeter:
Linux
./jmeter.sh -n -t /caminho/script.jmx -l /caminho/log.jtl -e -o /caminho/report.html
Windows
jmeter.bat -n -t /caminho/script.jmx -l /caminho/log.jtl -e -o /caminho/report.html
Mais informações sobre execução sem interface gráfica recomendo a leitura desse post.
Dica: Opte para execuções de maior volume executar via linha de comando para minimizar overhead.
Conclusão
Existem várias maneiras de estruturar scripts no JMeter, importante é ter clareza de acordo com seu contexto, qual melhor abordagem e qual o tipo de teste de performance faz mais sentido ser aplicado.
Bons testes!
Por ARIANE IZAC
Apaixonada por testes e qualidade de software, colecionadora de viagens! Filha de peixe (jornalista) peixinho (blogueira) é. Diário de uma paixão: teste de Software é meu grupo.