Artillery.io: automatizando testes de carga com Azure DevOps
Em um artigo anterior abordei a execução de testes de carga (load tests) com o Artillery.io, uma ferramenta de linha de comando gratuito e que pode ser facilmente instalada via npm. Uma das capacidades extremamente úteis que o Artillery.io nos oferece é a possibilidade de geração dos resultados dos testes em um arquivo HTML formatado, o que simplifica em muito a visualização das métricas obtidas (número requisições com sucesso ou erro, requisições por segundo, tempos médios de resposta…).
Este conteúdo foi publicado aqui no blog e pode ser acessado através do link:
Artillery.io: testes de carga e geração de relatórios HTML
Neste novo post trago um exemplo de como automatizar a execução destes testes de carga, incluindo a geração dos relatórios HTML com os resultados. Farei uso para isto de recursos de agendamento oferecidos pelo Azure DevOps.
Como já mencionei no artigo anterior, temos como possíveis cenários para a necessidade de agendamento de load tests baseados no Artillery.io e outras ferramentas similares:
- A detecção de eventuais degradações de performance em uma aplicação Web, permitindo deste modo uma análise da saúde da aplicação;
- Verificar num ambiente de staging eventuais quedas de performance após modificações em um projeto.
Aproveito esse espaço para um convite…
Dia 30/06 (segunda) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Ao longo desta live abordarei dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 5, ASP.NET Core, Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria, bancos de dados e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.
Teremos também algumas novidades do .NET 6 demonstradas na prática!
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:
Exemplo no Azure DevOps
O Azure Pipelines também oferece dentro do Azure DevOps a alternativa de pré-agendar processos, facilitando assim a configuração de pipelines que envolvam a execução de tarefas periódicas. Podemos inclusive também tirar proveito dos inúmeros recursos pré-instalados nos virtual environments (utilizei Linux/Ubuntu aqui), caso este do npm (essencial para a execução do Artillery.io).
Na listagem a seguir temos um exemplo de pipeline criado no Azure DevOps, para a execução de testes a cada 5 min. Tomei como base nesta automação uma aplicação Web criada com o .NET 5 + ASP.NET Core e hospedada por meio do Azure App Service:
- Em schedules foi especificado no parâmetro cron a Cron Expression indicando a execução a cada 5 min;
- O arquivo load-tests-sitecontagem.yml contém os testes a serem executados, com uma simulação de envio de 30 a 50 requisições por segundo durante 20 segundos;
- A task replacetokens atualiza o arquivo load-tests-sitecontagem.yml com a URL de testes associada à variável urlTarget;
- Os steps envolvem a instalação do npm localmente no virtual environment (ubuntu-latest), com as execuções do Artillery.io via npx;
- Por fim teremos a publicação do relatório HTML, com isto acontecendo a partir da task PublishHtmlReport.
O conteúdo do arquivo load-tests-sitecontagem.yml pode ser observado na próxima listagem:
Produzi recentemente um vídeo gratuito e que está publicado no canal Azure na Prática detalhando passo a passo este exemplo. O vídeo está no YouTube e pode ser assistido gratuitamente (recomendo fortemente para que você o faça, a fim de entender toda a dinâmica deste processo):
Este exemplo de pipeline foi disponibilizado no GitHub:
O projeto empregado nos testes também está no GitHub:
https://github.com/renatogroffe/ASPNETCore5-RazorPages-LoadTesting-Artillery_SiteContagem