Locust Load Test
Locust Load Test
Salve jovens!! No ciclo de entrega de software, o teste de carga uma das etapas mais importantes. É como ele, e somente com ele seremos capazes de afirmar que o sistema suporta uma carga X ou Y.
Recentemente eu testei uma ferramenta simples de instalar e de utilizar chamada de Locust.io. Neste post, vou explicar um pouco do Locust, ela é super fácil de instalar e de usar, e como pode te ajudar a simular muitos usuários acessando sua aplicação simultaneamente, revelando gargalos e garantindo que seus sistemas estejam sempre rodando liso.
AHH! Podem aguardar a parte II deste assunto, pois precisei colocar os labs para um segundo post ;).
O que é Teste de carga e por que ele é tão importante?
Vamos fazer uma breve recapitulação sobre o que é teste de carga e por que ele é tão vital para qualquer ambiente na cloud. Pensa comigo, você tem uma aplicação que funciona perfeitamente no seu laptop quando você e mais alguns colegas estão usando, blz?. Mas e se de repente 1.000, 10.000 ou até 100.000 usuários tentam acessá-la ao mesmo tempo? Ela aguenta o tranco? Ela segue funcionando bem?
É nessa hora que você precisa lembrar do teste carga entra. Basicamente, é o processo de simular um grande número de usuários (ou “carga”) interagindo com seu sistema para ver como ele se comporta. O objetivo é identificar pontos fracos, gargalos, falhas de desempenho e limites de capacidade antes que eles virem um problemão na vida real.
Por que é importante?
- Garantia de estabilidade, evitar quedas inesperadas e lentidão.
- Melhora da experiência do usuário, ninguém gosta de uma aplicação lenta, né?
- Otimização der recursos, entender a capacidade real ajuda a dimensionar sua infraestrutura de forma eficiente, evitando gastos desnecessários.
- Identificação de gargalos, descobrir onde a coisa “aperta” pode ser o banco de dados, a rede, o servidor de aplicação, etc.
Se quiserem mais detalhes, existem três posts antigos explicando em detalhes o que é um teste de carga, veja os links:
- Testes de Carga - Parte 1 - Infraestrutura
- Testes de Carga - Parte 2 - Redes e SO
- Testes de Carga Parte 3 Final - Testes
Instalando e usando o Locust
Agora que você já sabe da importância do teste de carga, vamos falar do Locust. O Locust é uma ferramenta de teste em Python. O que o torna simples de usar é a sua abordagem em vez de usar uma interface gráfica complexa para criar cenários de teste, você escreve o comportamento dos seus usuários em código Python puro. Isso significa uma flexibilidade e uma curva de aprendizado mais baixa para quem já tem familiaridade com programação.
Instalação
É muito simples instalar, é simples mesmo!!!!
1$ sudo apt install python3-pip -y
2$ sudo apt-get install python3-locust -y
3$ locust --version
4locust from /usr/lib/python3/dist-packages/locust (python 3.12.3)
Usando Locust
Como eu só queria testar e ver o funcionamento básico, eu apontei para um serviço público e disparei poucos resquests para o destino.
from locust import HttpUser, task, between
class MeuPrimeiroUsuario(HttpUser):
host = "http://google.com"
wait_time = between(1, 5)
@task
def acessar_pagina_inicial(self):
self.client.get("/")
Veja o dashboard de resultados, gostei bastante da interface web da ferramenta.

Image: Locust Dashboard
Usando o em modo texto
Para mim, é um ponto de avaliação a ferramenta ter uma boa saída no terminal. Por que é importante meu jovem? Lembre-se, idealmente todas as ferramentas do seu “cinto de utilidades” devem ser executadas pelo pipeline, sendo assim deve ser fácil iniciar e captar a saída do comando para que seja possível realizar algum tipo de integração com o pipeline de CI/CD.
locust -f ./test001.py --headless -u 20 -r 5 -t 10s
Vejam o resultado
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00
[2025-06-01 10:53:32,595] /INFO/locust.runners: Ramping to 20 users at a rate of 5.00 per second
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
GET / 14 0(0.00%) | 237 176 477 230 | 0.00 0.00
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 14 0(0.00%) | 237 176 477 230 | 0.00 0.00
[2025-06-01 10:53:35,598] /INFO/locust.runners: All users spawned: {"MeuPrimeiroUsuario": 20} (20 total users)
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
GET / 39 0(0.00%) | 222 166 477 220 | 4.50 0.00
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 39 0(0.00%) | 222 166 477 220 | 4.50 0.00
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
GET / 61 0(0.00%) | 210 166 477 200 | 8.00 0.00
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 61 0(0.00%) | 210 166 477 200 | 8.00 0.00
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
GET / 83 0(0.00%) | 204 166 477 190 | 9.00 0.00
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 83 0(0.00%) | 204 166 477 190 | 9.00 0.00
[2025-06-01 10:53:42,357] /INFO/locust.main: --run-time limit reached, shutting down
[2025-06-01 10:53:42,395] /INFO/locust.main: Shutting down (exit code 0)
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
GET / 103 0(0.00%) | 202 166 477 190 | 10.72 0.00
--------|----------------------------------------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 103 0(0.00%) | 202 166 477 190 | 10.72 0.00
Response time percentiles (approximated)
Type Name 50% 66% 75% 80% 90% 95% 98% 99% 99.9% 99.99% 100% # reqs
--------|--------------------------------------------------------------------------------|--------|------|------|------|------|------|------|------|------|------|------|------
GET / 190 200 200 220 240 250 250 290 480 480 480 103
--------|--------------------------------------------------------------------------------|--------|------|------|------|------|------|------|------|------|------|------|------
Aggregated 190 200 200 220 240 250 250 290 480 480 480 103
Usando em modo texto e pensando em integrações
A melhor forma que eu encontrei de gerar um resultado com uma resposta possível de integrar com outras ferramentas foi utilizando a opção –csv. Gerando uma saída em formato CSV que posteriormente pode ser tratada e guardada automaticamente em formato de tabela em um wiki do projeto.
locust -f ./test001.py --headless -u 20 -r 5 -t 10s --csv relatorio_teste
$ cat relatorio_teste_stats.csv
Type,Name,Request Count,Failure Count,Median Response Time,Average Response Time,Min Response Time,Max Response Time,Average Content Size,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%
GET,/,82,0,330.0,467.3654307900905,175.07406091317534,1838.0322779994458,17942.10975609756,9.237214940424057,0.0,480,530,560,610,750,1200,1800,1800,1800,1800,1800
,Aggregated,82,0,330.0,467.3654307900905,175.07406091317534,1838.0322779994458,17942.10975609756,9.237214940424057,0.0,480,530,560,610,750,1200,1800,1800,1800,1800,1800
Testes distribuídos
Uma das coisas de que gostei e considero essencial em uma ferramenta de teste de carga é a capacidade de executar testes distribuídos. Nem sempre uma única origem consegue gerar a quantidade necessária de requisições, threads ou usuários para os testes desejados. Por isso, é importante que a ferramenta permita a execução de testes a partir de múltiplas localidades, algo que o Locust torna bem fácil de fazer.
Para rodar em modo distribuído, você inicia o master com:
No servidor master, execute o seguinte comando:
locust -f meu_teste.py --master
Nos servidores de work
locust -f meu_teste.py --worker --master-host=IP_DO_MASTER
Resumo
Gostei muito da ferramenta Locust ela atende bem a um público técnico de redes, sistemas e cloud. Oferece vantagens como o controle total sobre o que será executado, o que facilita bastante para quem já está familiarizado com scripts e automação em Python. A instalação e execução são bem simples, o que significa menos tempo configurando e mais tempo testando e isso, para mim, é uma grande vantagem.
A interface web do Locust é extremamente útil para monitorar os testes em tempo real, exibindo métricas como requisições por segundo, tempos de resposta e falhas. Esses dados ajudam a identificar problemas rapidamente exatamente o que um engenheiro DevOps precisa.
Sem a menor dúvida, essa ferramenta agora tem lugar garantido na minha caixa de ferramentas. Ganhou meu 👍!
Abraços!
Vida longa e próspera a todos!!
Referências
- https://locust.io/
- Testes de Carga - Parte 1 - Infraestrutura
- Testes de Carga - Parte 2 - Redes e SO
- Testes de Carga Parte 3 Final - Testes
- https://infraascode.com.br/ci-cd/
Entre em contato:
NewsLetter - https://engineeringmanager.com.br/Linkdin - linkedin.com/in/leonardoml/
Twitter: @infraascode_br
Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!
|
