DEV Community

Erandir Junior
Erandir Junior

Posted on

Testes de carga e estresse: o que são e como fazer?

Muito se fala sobre testes unitários e sua importância, mas, em contrapartida, vejo pouco sobre testes de carga e estresse. Esses testes são tão importantes quanto os demais tipos de testes existentes.

Podemos resumir o teste de carga como a validação da aplicação sob a carga esperada e em momentos de pico.

Podemos resumir o teste de estresse como a validação da aplicação além do limite de carga esperado, observando como ela se comporta nesse cenário.

Agora que temos uma breve noção do que são esses testes, podemos perceber benefícios que vão muito além das definições apresentadas.

Vamos analisar o seguinte cenário: digamos que um sistema qualquer fosse criado para suportar no máximo 100 usuários simultaneamente,
algo interno, etc. Só que a configuração definida para o sistema
suporta não apenas os 100, mas 5 mil usuários simultâneos. À primeira vista, isso parece maravilhoso, mas quanto de infraestrutura foi necessário para que esse sistema operasse dessa forma?

Outro ponto importante, especialmente para quem trabalha com Kubernetes e pods, é: será que a configuração de escalabilidade da aplicação está correta?

Um sistema excessivamente dimensionado pode ser tão problemático quanto um sistema subdimensionado.

Então, podemos resumir que os testes de carga e estresse vão além de apenas verificar o comportamento da aplicação
com determinada taxa de requisições, mas também validar os custos de infraestrutura, qual nível de disponibilidade a aplicação consegue manter e se nossas configurações de auto scaling estão corretas.

Um caso pessoal que posso falar sem dar muitos detalhes é o de uma aplicação que estava em Kubernetes, com as configurações de infraestrutura bem ajustadas, o sistema respondia rápido e, aparentemente, estava tudo certo. Porém, ao realizar um simples teste de carga, notamos que um pod suportava no máximo duas requisições simultâneas antes de escalar. Com base nesse problema, começamos a analisar e melhorar outras configurações.
Ao final, conseguimos aumentar significativamente a carga suportada sem alterar a quantidade de memória ou CPU destinada a cada pod.

Dada toda a importância dos testes de carga e estresse, a pergunta principal é: como podemos realizar esse tipo de teste? Bem, existem algumas ferramentas que podem nos ajudar, gratuitas ou pagas, cada uma tem seus prós e contras. Das ferramentas que já utilizei, posso citar o JMeter e o Vegeta. Outra ferramenta bastante conhecida é o k6. No exemplo deste artigo, vamos utilizar um software que desenvolvi com auxílio de IA: o Unified Application Workspace (UAW).

O UAW é uma aplicação que fornece diversos recursos para quem desenvolve. Neste artigo, iremos focar apenas nos testes.
A primeira coisa a fazer é clonar ou baixar a última versão do projeto. Vale lembrar que esse sistema funciona via Docker. Após clonar o projeto, acesse o diretório da aplicação, copie o arquivo .env.example para .env e execute o seguinte comando:

docker compose up --build
Enter fullscreen mode Exit fullscreen mode

Após isso, basta acessar http://localhost:3000/ no navegador de sua preferência. Caso queira, é possível alterar as portas tanto do frontend quanto do backend. Para isso, basta modificar os valores no arquivo .env.

Na primeira vez que acessar o sistema, recomendo alterar o idioma da aplicação. Na barra superior à direita, é possível escolher entre BR (Português Brasileiro) e EN (Inglês). Neste artigo, utilizaremos o idioma BR.

Agora é necessário criarmos uma nova coleção, para isso, basta informar o nome e clicar em NOVA COLEÇÃO:

Com a coleção criada, clique em GERENCIAR COLEÇÃO para termos acesso aos recursos internos do UAW:

Já dentro da coleção, clique no botão de + HTTP REQUEST no menu lateral, isso irá criar uma nova ação:

Com o HTTP Request criado, altere os parâmetros de Método da Requisição e URL. Importante destacar que o uaw fornece dois modos de teste: O primeiro é o modo Quantidade de Requisições por Segundo, onde definimos quantas requisições queremos fazer, independente do retorno. O segundo é o modo Threads, onde definimos a quantidade de threads, e essas threads ficam fazendo requisições pelo tempo informado, nesse modo, o retorno importa, pois uma nova requisição só é iniciada após a anterior ser finalizada. Pode parecer confuso, mas aqui utilizaremos o primeiro modo:

Agora clique em RUN para rodar os testes, perceba que, na lateral direita, será exibido o relatório de execução dos testes.

Você verá o teste sendo executado, clique no botão de maximizar ao lado da palavra EXECUÇÃO para uma melhor visão do relatório.

No relatório de execução, você pode acompanhar em tempo real algumas informações, como quantidade de requisições sendo feitas, duração, latência, etc. Agora role para o fim da página, lá você encontrará uma listagem das últimas 100 requisições realizadas:

Clique em algum item da listagem para ter mais detalhes sobre os dados enviados e resposta:

E pronto, acabamos de realizar nosso primeiro teste. Agora você pode alterar os parâmetros e reexecutá-lo até descobrir o quanto sua aplicação suporta. Para um teste de estresse, basta aumentar significativamente a quantidade de requisições por segundo. Para voltar à tela de edição, clique no botão de restaurar.

Espero ter conseguido transmitir a importância dos testes de carga e estresse não apenas para a sua aplicação, mas para a empresa como um todo. Além disso, conhecemos um pouco da ferramenta UAW e como utilizá-la para executar testes de carga e estresse. E é isso. Até o próximo artigo.

Top comments (2)

Collapse
 
eriveltondasilva profile image
Erivelton da Silva

excelente conteúdo, amigo
nunca tinha ouvido falar sobre esses tipos de testes, achava q era só ataques ddos kkk muito obrigado

Collapse
 
erandirjunior profile image
Erandir Junior

Realmente pouco se fala sobre o assunto, mas é tão importante quanto outros tipos de testes.