Testes de Carga: automações com o package loadtest em Azure DevOps e GitHub Actions
Neste novo artigo trago 2 exemplos relativos à automação de testes de carga, utilizando para isto o pacote npm loadtest. Já abordei inclusive o uso desta ferramenta em outro post deste blog:
Testes em projetos Back-End: o pacote npm loadtest, testes de integração com Azure Functions | pt 3
Os exemplos aqui apresentados envolvem um Workflow do GitHub Actions e um Pipeline do Azure DevOps. E por que então empregar uma solução de automação, quando poderíamos muito bem executar manualmente um conjunto de testes a partir de nossos próprios ambientes de Desenvolvimento?
A resposta está na possibilidade de desonerarmos nossas máquinas de um consumo mais acentuado de recursos computacionais (memória e processamento), tomando como exemplo testes com cenários de escalabilidade na nuvem. Podemos também nos valer dessa estratégia para checar periodicamente a performance de nossas aplicações, através da execução automatizada destes testes.
E aproveito este espaço para um convite…
Nesta segunda 19/09 às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Acompanhe esta live e fique por dentro de diversas dicas e truques extremamente úteis no dia a dia da orquestração de containers com Kubernetes, ferramentas auxiliares, além da integração com serviços em nuvem — incluindo o suporte ao AKS — Azure Kubernetes Service!
Alguns temas previstos:
- k9s: novas dicas para monitoramento, gerenciamento e testes em um cluster Kubernetes
- Criando clusters Kubernetes localmente com kind e configurando serviços para testes
- Kubernetes + Testes de Integração: automação descomplicada no Azure DevOps com kindFaça sua inscrição em:
Exemplo com GitHub Actions
Na próxima listagem está o código para o Workflow do GitHub Actions, em que é possível destacar:
- O uso do virtual environment ubuntu-latest, que já conta com versões atualizadas do Node.js e do npm para utilização durante a execução do Workflow;
- O package loadtest foi instalado via npm localmente, já que o modo global não é permitido em virtual environments (tanto no GitHub Actions, quanto no Azure DevOps/Azure Pipelines);
- A execução do package loadtest será via comando npx, com as variáveis endpoint, concurrentUsers e totalRequests indicando, respectivamente, a URL para testes, o número simulado de usuários acessando este endereço simultaneamente e o total de requisições a serem produzidas;
- A cláusula workflow_dispatch possibilitará a execução manual do Workflow.
Para a criação deste Worflow utilizei o template Simple workflow:
Uma vez criado o Workflow, notaremos a opção para a execução manual do mesmo (graças ao uso da cláusula workflow_dispatch):
Na imagem a seguir podemos observar que a sequência de passos/steps definida no job loadtests foi corretamente executada:
Bem como temos a condição de navegar pelos logs observando o resultado dos testes:
O repositório com o Workflow já foi disponibilizado no GitHub:
https://github.com/renatogroffe/GitHubActions-TestesCarga-loadtest_npm
Caso achem útil este Workflow do GitHub Actions, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Exemplo com Azure DevOps
A próxima listagem traz a mesma implementação de testes de carga com o package loadtest, já considerando agora um Pipeline do Azure DevOps:
Utilizei aqui o template Starter pipeline:
Ao acessar o Pipeline teremos o seu histórico de execuções, assim como a possibilidade de executá-lo manualmente (botão Run):
Na próxima imagem temos um exemplo de execução do Pipeline concluída com sucesso:
Há também no Azure Pipelines uma funcionalidade para visualização dos logs gerados pela ferramenta/package loadtest:
O repositório com este Pipeline foi disponibilizado no GitHub:
https://github.com/renatogroffe/AzureDevOps-Pipeline-TestesCarga-loadtest_npm
Caso achem útil este Pipeline do Azure DevOps, peço por favor também um ⭐️ no repositório apoiando. Fica ainda o convite para que vocês me sigam lá no GitHub!
Estes 2 exemplos de uso do package loadtest foram apresentados em uma live que participei recentemente: