No mundo do desenvolvimento de software, a importância dos testes não pode ser subestimada, sendo os testes de performance uma área crítica para garantir a eficácia e eficiência das aplicações. Os testes de performance buscam entender como uma aplicação se comporta sob certas condições, visando alcançar um número específico de requisições dentro de um determinado período, e normalmente empregam ferramentas de mercado específicas para esse fim.
Nós, enquanto desenvolvedores, na maioria das vezes nos atemos aos testes unitários a nível de “services” ou aos testes da “controler”: basicamente o que podemos rodar a nível de Kernel mesmo que estejamos falando de testes E2E. Porém, existem diversos outros testes, não tão fomentados assim, para se explorar(conforme necessidade). Nesse artigo irei abordar um deles: o teste da família “Performance”. Denomino dessa maneira no decorrer do texto, mesmo sendo a intitulação “Carga” e “Estresse” também bem comuns para o mesmo tipo de teste.
Ref: https://lab.vortx.com.br/testes-de-performance-o-que-sao-e-como-utilizamos
Existem diferentes momentos e cenários onde os testes de performance são vitais, como antes do lançamento de um sistema que espera receber um grande volume de acessos, ou em preparação para eventos que sabidamente aumentam a carga sobre os sistemas, como a Black Friday em e-commerces. Esses testes podem ajudar a prever e melhorar a resposta do sistema sob estresse, garantindo a estabilidade, tempo de resposta adequado, e escalabilidade.
Os testes de performance são categorizados em Testes de Carga, para simular o comportamento esperado do sistema sob uso normal; Testes de Estresse, para determinar os limites do sistema; e Testes de Performance propriamente ditos, que buscam identificar o comportamento do sistema entre esses dois extremos. Além desses, existem Testes de Endurance e Testes de Pico, que avaliam a durabilidade e a capacidade de resposta a picos de demanda, respectivamente.
Ferramentas como JMeter e Gatling são comumente utilizadas para realizar esses testes, oferecendo uma ampla gama de recursos para simulação de cargas, medição de performance, e análise de resultados.
Voltando à ideia da pirâmide de testes, os testes de Performance são E2E, logo sua manutenção é alta e sua execução e configuração são custosas. A primeira pergunta que devemos fazer é: meu cenário precisa de um teste de Performance?
Testes de Performance normalmente são aplicados para prever o comportamento do seu serviço em condições de consumo e estresse específicas, como por exemplo o lançamento de um sistema que, em teoria terá grande número de acessos, uma vez que pontos como estabilidade, tempo de resposta, escalabilidade e outros variam em um cenário real, com altos níveis de consumo. Portanto, esse seria um dos casos onde utilizar um teste de Performance salvaria vidas.
Alguns outros cenários comuns para o testes de Performance seriam:
- Testar se o ambiente está preparado para um grande aumento de acesso, como um e-commerce antes da black-friday;
- Validar se seus serviços auto-scale estão funcionando como esperado;
- Garantir que as integrações que sua aplicação faz não se tornem pontos de gargalo;
- Mensurar o consumo de dependências, como recursos de hardware, ou a latência da rede;
- Estabelecer métricas críticas para os serviços, para disparo de alertas e monitoração.
… entre outros problemas que só seriam encontrados no ambiente de produção.
Ferramentas que eu levaria em consideração
Apesar de ser um grande fã de JMeter para testes mais complexos, tenho utilizado o postman para testes mais simples (muitos simples), e k6 dado a facilidade da criação dos testes mais complexos, mas acredito que seja uma questão até de gosto, dado que na minha opinião o Jmeter é a mais completa (porém a mais complexa também), de qualquer forma, segue uma lista de ferramentas para se considerar:
- Apache JMeter: Ferramenta open-source focada em testar carga e desempenho de aplicações. Excelente para simular cargas pesadas em servidores, redes ou objetos para analisar o desempenho sob diferentes condições. JMeter
- Gatling: Destaca-se pela sua eficiência em testes de carga e sua capacidade de gerar relatórios detalhados. Utiliza a linguagem Scala para scripts de teste, favorecendo testes complexos de aplicações web modernas. Gatling
- k6: Uma moderna ferramenta open-source de teste de performance, projetada para ser simples, porém poderosa. k6 permite desenvolver scripts de teste em JavaScript, oferecendo uma solução eficaz para testar a performance de APIs, microserviços e sites. Destaca-se pela facilidade de uso e por sua integração com ambientes de desenvolvimento e operações (DevOps). k6
- LoadRunner: Oferece um conjunto robusto de ferramentas para testar a capacidade de resposta, a estabilidade e a escalabilidade de novas aplicações sob carga. Amplamente utilizado por empresas para garantir que suas aplicações possam suportar tráfego de usuário em volumes altos. LoadRunner
- Locust: Uma ferramenta leve e fácil de usar, que permite escrever testes em Python. É escalável e permite simular milhões de usuários concorrentes para testar a carga e o desempenho das aplicações. Locust
- BlazeMeter: Compatível com JMeter, oferece testes de performance na nuvem, permitindo simular uma vasta quantidade de usuários para testes de API, aplicações web, e aplicações móveis. Proporciona integrações com CI/CD para automação de testes. BlazeMeter
- Postman: Além de ser uma ferramenta poderosa para desenvolvimento e teste de APIs, Postman também oferece recursos para testes de performance de APIs. Permite que os desenvolvedores testem a velocidade e a confiabilidade das APIs em diferentes condições de rede. Postman
- Cada ferramenta oferece uma abordagem única para testes de performance, permitindo que equipes de desenvolvimento escolham a mais adequada às suas necessidades específicas.
Bom, por hoje é só! 😉