Test di stress Fastapi
Pitone locusta
I test di scalabilità sono una parte importante per preparare la produzione di servizi Web. Esistono molti strumenti per i test di carico, come Gatling, Apache JMeter, The Grinder, Tsung e altri. Ce n'è anche uno (e il mio preferito) scritto in Python e costruito sulla libreria Requests : Locust .
Come si nota sul sito web di Locust:
Una caratteristica fondamentale di Locust è che descrivi tutto il tuo test nel codice Python. Non sono necessarie interfacce utente ingombranti o XML gonfio, solo codice semplice.
Installazione di locuste
Il modulo Python per il test delle prestazioni Locust è disponibile su PyPI e può essere installato tramite pip o easy_install.
pip install locustio or: easy_install locust
Esempio locustfile.py
Quindi crea locustfile.py seguendo l' esempio da docs. Per testare il progetto Django ho dovuto aggiungere alcune intestazioni per il supporto csrftoken e le richieste ajax. Final locustfile.py potrebbe essere qualcosa di simile al seguente:
# 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
Per eseguire Locust con il file python locust sopra, se è stato chiamato locustfile.py , potremmo eseguire (nella stessa directory di locustfile.py ):
locust --host=http://example.com
Quando viene avviata l'app di test del carico Python Locust, dovresti visitarehttp://127.0.0.1:8089/e lì troverai l'interfaccia web della nostra istanza Locust. Quindi inserire Numero di utenti da simulare (ad es. 300) e Velocità schiusa (utenti generati/secondo) (ad es. 10) e premere Avvia sciame . Dopodiché Locust inizierà a "covare" gli utenti e sarai in grado di vedere i risultati nella tabella.
Visualizzazione dei dati in Python
Quindi, la tabella è carina ma preferiremmo vedere i risultati su un grafico. C'è un problema in cui le persone chiedono di aggiungere un'interfaccia grafica a Locust e ci sono diverse proposte su come visualizzare i grafici per i dati di Locust. Ho deciso di utilizzare la libreria di visualizzazione interattiva Python Bokeh .
È facile installare la libreria grafica Python Bokeh da PyPI usando pip:
pip install bokeh
Ecco un esempio di esecuzione del server Bokeh.
Possiamo ottenere i dati di Locust in formato JSON visitandohttp://localhost:8089/stats/requests. I dati dovrebbero essere qualcosa del genere:
{
"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
}
Correre tutti insieme
Quindi il nostro Locust è in esecuzione (in caso contrario, avvialo con locust --host=http://example.com) e ora dovremmo iniziare Bokehservercon bokeh servee quindi eseguire il nostro plotter.py con python plotter.py. Come mostrano le nostre chiamate di script , una scheda del browser viene automaticamente aperta all'URL corretto per visualizzare il documento.
Se Locust sta già eseguendo il test, vedrai immediatamente i risultati sui grafici. Altrimenti inizia un nuovo test ahttp://localhost:8089/e torna alla scheda Bokeh e guarda i risultati dei test in tempo reale.
Questo è tutto. Puoi trovare l'intero codice su github . Sentiti libero di clonarlo ed eseguire l'esempio.
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

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































