Teste de Performance, com o locust.io usando Docker

Thiago Soares
Docker: Um canivete suíço
2 min readApr 29, 2020

--

Recentemente para o lançamento de uma nova API, precisei fazer um teste de carga, mas nunca tinha feito um antes. Comecei a olhar e me deparei com o Locust.io (https://locust.io/).
Sou muito adepto do Docker, e comecei a ver como fazer o teste de carga usando a plataforma, para poder fazer os testes iniciais da minha própria máquina, de forma rápida e viável.

Cheguei aos scripts abaixo, claro suprimindo o domínio e os dois subdomínios que fiz o teste, por serem algo do trabalho.

locustfile.py

from locust import HttpLocust, TaskSet, task
from locust.log import setup_logging
import requests

class PublicTaskSet(TaskSet):

@task(1)
def alternativa(self):
self.client.get()

class PrivateTaskSet(TaskSet):

@task(1)
def recommendation(self):

self.client.get(‘/subdomain_2’, headers = {‘Authorization’: ‘Bearer 1b36a0531234bf250529d5f’})

class WebsiteTasks(TaskSet):
tasks = {
PublicTaskSet: 20,
PrivateTaskSet: 10,
}

class BasicTasks(HttpLocust):
task_set = WebsiteTasks
min_wait = 5000
max_wait = 10000

docker-compose.yml

version: “3”
services:
locust-master:
image: swernst/locusts
volumes:
— ./scripts:/scripts
ports:
— “8089:8089”

locust-worker:
image: swernst/locusts
command: “ — master-host=locust-master”
volumes:
— ./scripts:/scripts

locust.config.json

{
“target”: “https://api-domain",
“locusts”: [“BasicTasks”]
}

Faça as alterações necessárias aos domínios e subdomínios que for usar. Maiores informações estão na documentação do projeto.

Executar:

docker-compose up — scale locust-worker=1

O meu arquivo "locustfile.py" e "locust.config.json" estão dentro do diretório "/scripts" que utilizo no volume para poder alterar o código dentro container.
Isso agiliza o teste se precisar alterar a URL ou token, etc … alterações no meu código refletem dentro do container.

A interface é bem amigável e proporciona um teste rápido para verificar o andamento dos requests por segundo e do response time da API.

O teste inicial eu comecei a fazer da minha própria máquina, porém o teste de fato não foi feito dela, visto que a quantidade de request definidos como threshold para essa API, o meu hardware não aguentaria abrir tantas threads simultâneas, então foi usado esse mesmo projeto/script em uma farm de servidores.

Deixo aqui os meus agradecimentos aos idealizadores do projeto.
Me surpreendi com o resultado e com a simplicidade com que pode ser útil.

--

--