Teste de Estresse Fastapi

Locust Python
O teste de escalabilidade é uma parte importante para preparar a produção de serviços da Web. Existem muitas ferramentas para teste de carga, como Gatling, Apache JMeter, The Grinder, Tsung e outras. Há também um (e meu favorito) escrito em Python e criado na biblioteca Requests : Locust .
Como é notado no site da Locust:
Uma característica fundamental do Locust é que você descreve todos os seus testes em código Python. Não há necessidade de interfaces de usuário desajeitadas ou XML inchado, apenas código simples.
Instalação de gafanhotos
O módulo python de teste de desempenho Locust está disponível no PyPI e pode ser instalado por meio de pip ou easy_install.
pip install locustio or: easy_install locust
Exemplo locustfile.py
Em seguida, crie locustfile.py seguindo o exemplo de docs. Para testar o projeto Django, tive que adicionar alguns cabeçalhos para suporte a csrftoken e solicitações ajax. O locustfile.py final pode ser algo como o seguinte:
# locustfile.py
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
self.login()
def login(self):
# GET login page to get csrftoken from it
response = self.client.get('/accounts/login/')
csrftoken = response.cookies['csrftoken']
# POST to login page with csrftoken
self.client.post('/accounts/login/',
{'username': 'username', 'password': 'P455w0rd'},
headers={'X-CSRFToken': csrftoken})
@task(1)
def index(self):
self.client.get('/')
@task(2)
def heavy_url(self):
self.client.get('/heavy_url/')
@task(2)
def another_heavy_ajax_url(self):
# ajax GET
self.client.get('/another_heavy_ajax_url/',
headers={'X-Requested-With': 'XMLHttpRequest'})
class WebsiteUser(HttpLocust):
task_set = UserBehavior
Para executar o Locust com o arquivo python locust acima, se ele fosse nomeado locustfile.py , poderíamos executar (no mesmo diretório que locustfile.py ):
locust --host=http://example.com
Quando o aplicativo de teste de carga python Locust for iniciado, você deve visitarhttp://127.0.0.1:8089/e lá você encontrará a interface da web de nossa instância do Locust. Em seguida, insira o número de usuários para simular (por exemplo, 300) e a taxa de eclosão (usuários gerados/segundo) (por exemplo, 10) e pressione Iniciar enxame . Depois disso, o Locust começará a "incubar" os usuários e você poderá ver os resultados na tabela.
Visualização de Dados Python
Portanto, a tabela é boa, mas preferimos ver os resultados em um gráfico. Há um problema em que as pessoas pedem para adicionar uma interface gráfica ao Locust e há várias propostas de como exibir gráficos para os dados do Locust. Decidi usar a biblioteca de visualização interativa Python Bokeh .
É fácil instalar a biblioteca de gráficos python Bokeh do PyPI usando pip:
pip install bokeh
Aqui está um exemplo de execução do servidor Bokeh.
Podemos obter dados do Locust no formato JSON visitandohttp://localhost:8089/stats/requests. Os dados devem ser algo como isto:
{
"errors": [],
"stats": [
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "/",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": "GET",
"num_requests": 9
},
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "Total",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": null,
"num_requests": 9
}
],
"fail_ratio": 0.0,
"slave_count": 2,
"state": "stopped",
"user_count": 0,
"total_rps": 0.0
}
Correndo todos juntos
Portanto, nosso Locust está em execução (se não, inicie-o com ) locust --host=http://example.com
e agora devemos começar e depois executar nosso plotter.py com . Como mostram nossas chamadas de script , uma guia do navegador é aberta automaticamente para o URL correto para visualizar o documento.Bokehserver
bokeh serve
python plotter.py
Se o Locust já estiver executando o teste, você verá os resultados nos gráficos imediatamente. Caso contrário, inicie um novo teste emhttp://localhost:8089/e retorne à guia Bokeh e assista aos resultados dos testes em tempo real.
É isso. Você pode encontrar o código completo no github . Sinta-se à vontade para cloná-lo e executar o exemplo.
git clone https://github.com/steelkiwi/locust-bokeh-load-test.git
cd locust-bokeh-load-test
pip install -r requirements.txt
locust --host=<place here link to your site>
bokeh serve
python plotter.py