PT | EN

Como Coletar Insights de Performance Com Artillery 

Por 03/07/2023 28/10/2024 6 minutos

No mês de junho, tive a oportunidade de apresentar um SoftDrops: evento online da SoftDesign que tem como objetivo promover a troca de conhecimento entre pessoas colaboradoras. O tema escolhido foi Artillery, ferramenta utilizada na área de Desenvolvimento de Software para monitorar a performance de aplicações e efetuar Testes de Carga, Estresse e Desempenho.

Por meio de sua utilização, é possível realizar o acompanhamento e a escalabilidade de APIs (Application Programming Interface) – em português, Interface de Programação de Aplicativos. Esse conjunto de regras e protocolos nos permite conectar serviços e soluções, facilitando a comunicação e interação entre diferentes sistemas e bibliotecas.

Geralmente, os Testes de Carga realizam a simulação de tráfego para perceber a capacidade da API em lidar com uma grande quantidade de usuários simultaneamente. Já no Teste de Estresse, verificamos seu potencial em um cenário onde a chegada de usuários é gradual, passando para um aumento de carga inesperado.

Por fim, o Teste de Desempenho é o resultado em métricas dos testes anteriores. Ou seja, é quando analisamos a latência, tempo de resposta, taxa de transferência e possíveis erros gerados durante a execução.

Se você quer aprender a utilizar o Artillery para realizar esses testes, está no lugar certo!

Mas, Por Que Devemos Utilizar o Artillery?

Por ser baseado na linguagem Node.js, o Artillery permite a criação de scripts personalizados e adição de outras bibliotecas integráveis aos testes. Com a sintaxe YAML, linguagem de programação conhecida pela facilidade de leitura e entendimento, é possível realizar diferentes solicitações HTTP, definir o número de usuários virtuais, simular diferentes taxas de tráfego e até mesmo especificar sua duração. 

Outra vantagem é o acompanhamento em tempo real da execução. Entretanto, também é possível verificar detalhadamente o processamento por meio do relatório gerado pela própria ferramenta ao final dos testes. Em resumo, o Artillery apresenta algumas vantagens como, por exemplo: facilidade de uso, flexibilidade de recursos e configurações personalizáveis, garantido suporte para testes distribuídos e integração com bibliotecas.

Além desses fatores, também é possível contar com uma comunidade ativa e uma documentação atualizada e robusta que auxilia tanto na introdução à ferramenta quanto nos seus recursos mais avançados.

Estrutura de Configurações

Para iniciar os testes, precisamos desenvolver uma estrutura básica. Ela deve conter os seguintes itens: target, fases, payload, cenários e fluxos. Abaixo, apresentamos um passo a passo utilizando o exemplo contido na documentação oficial do Artillery. 

O primeiro critério a ser definido é o target. Ele é a principal rota que irá ser chamada para a execução dos testes. Sua definição ocorre da seguinte maneira: 

A seguir, precisamos definir as fases de execução nas quais são estipuladas: a duração do teste, e a quantidade de usuários virtuais que serão criados nesse período. Vale ressaltar que neste momento é possível perceber a vantagem da configuração personalizada, já que existe mais uma maneira de definir a quantidade de usuários a serem criados, como por exemplo:

  • arrivalRate: onde são criados X usuários por segundo, não ultrapassando mais de X usuários simultâneos; 
  • rampTo: realiza a criação de X usuários por segundo com aumento constante até o final do tempo definido; 
  • arrivalRate + rampTo: define a criação de X usuários iniciais para Y usuários com taxa de chegada constante no restante do tempo estipulado. 

O próximo passo que compõe a estrutura básica é a definição de um payload, que consiste na forma como serão inseridos os dados no teste. Na maioria dos casos, é necessária uma grande quantidade de dados para inserção, por isso, uma opção é extrair as informações por meio de um arquivo .csv. Dessa maneira, definimos no código o arquivo e os campos que serão passados para o teste, conforme a imagem abaixo: 

Estrutura do Teste

Por fim, são criados os cenários e seus respectivos fluxos. Para isso, é feita uma definição de nome com o objetivo de melhorar a organização, seguida do fluxo em si. A estruturação básica desse fluxo é dada pela declaração do endpoint que será chamado e do body da requisição, conforme exemplificado nas linhas 23 a 26.

É também ao longo dessa etapa que fazemos uma captura de valores retornados pela requisição para serem utilizados em outras etapas do fluxo, caso seja necessário. Para realizar a captura de um valor utilizamos um comando específico, conforme a linha 27.

Assim, ao final teremos o seguinte código: 

Analisando Resultados

Como dito anteriormente, é possível verificar em tempo de execução como está o andamento do teste por meio do próprio terminal. Com esse relatório, podemos ver o número de usuários virtuais criados, códigos de resposta HTTP e tempos de resposta dos endpoints da API. Veja na imagem abaixo:

Além disso, outro meio de monitoramento é o relatório gerado através de comandos da própria ferramenta. Eles são mais visuais e detalhados. Assista ao vídeo para compreender melhor:  

Artillery Na Prática

No dia a dia, o Artillery é uma ferramenta que pode ser utilizada para analisar casos de instabilidade ou desempenho. Ao realizar a verificação de uma instabilidade, por exemplo, é possível efetuar o teste de maneira prática e rápida para que sejam tomadas as medidas necessárias de correção de problemas.

Como ressaltado anteriormente, um dos exemplos de utilização é em casos de instabilidade na aplicação. Após a execução – ao fazer um teste para descobrir onde e quando ocorre o problema – é possível perceber as instabilidades no sistema quando o número de usuários suportados chega ao máximo. Inclusive, isso pode ocasionar uma queda no servidor, conforme apresentado nos gráficos abaixo: 

Já na verificação de desempenho, ao realizar mudanças de regras de negócio ou estruturação de código, também é possível realizar testes com o Artillery, analisando o resultado para saber como a nova implementação refletiu no desempenho. Contudo, para isso é necessário verificar outra métrica também reportada pela ferramenta: o tempo médio de execução.

A primeira imagem refere-se ao desempenho em tempo médio de resposta por milissegundo, antes de ser realizada alguma modificação no serviço. Já a segunda, são os valores resultantes da execução do código de teste após alteração da API.

Conclusão 

O Artillery é uma ferramenta que pode auxiliar em diferentes aspectos, já que oferece uma composição facilitadora, que permite que diferentes pessoas com diversos níveis de conhecimento em programação utilizem de seus benefícios.

Ou seja, é recomendado para Desenvolvedores e QAs, pois auxilia durante o processo de desenvolvimento de produtos e serviços digitais, publicação, acompanhamento e manutenção de APIs, garantindo confiança e qualidade nas entregas.

Para saber mais sobre o tema, leia também este artigo.  

Foto do autor

Glória Grecco

Analista de Testes na SoftDesign. Cursa Análise e Desenvolvimento de Sistemas (IFRS). Buscando aprender e compartilhar conhecimento.

Posts relacionados

Quer saber mais sobre
Design, Estratégia e Tecnologia?