Test di carica API cù Locust

Test di carica API cù Locust

Test di carica di l'API cù Locust: Intro

Probabilmente avete statu in questa situazione prima: scrive u codice chì face qualcosa, un endpoint per esempiu. Pruvate u vostru endpoint usendu Postman o Insomnia, è tuttu funziona bè. Passate l'endpoint à u sviluppatore di u cliente, chì poi cunsuma u API è implementa l'applicazione. Ma dopu, l'API falla quandu l'utilizatori utilizanu l'app.

Questa pò esse una situazione super fastidiosa per esse, per ùn dì micca costu per un affari. Hè per quessa chì i sviluppatori di software realizanu una varietà di teste nantu à i sistemi di software per assicurà chì eseguinu cum'è previstu. L'API ùn sò micca diffirenti. Prima di implementà, duvete fà almenu teste di rendiment è teste di sicurezza.

I testi di prestazione ponu esse raggruppati in teste di funziunalità è teste di carica. I testi di funziunalità sò ciò chì generalmente utilizate Postman o Insomnia. Assicuranu chì a vostra API funziona cum'è aspettate. I testi di carica, invece, sò più preoccupati di cumu a vostra API funziona cù l'usu di u mondu reale è a carica di punta, è questu hè questu questu articulu. Fighjemu i testi di carica in più detail.

Cos'è l'API Load Testing?

A prova di carica API hè un tipu di teste chì i sviluppatori utilizanu per simulà a carica normale è di punta nantu à i punti finali. Stu tipu di teste permette à i sviluppatori di valutà u rendimentu di u mondu reale di una API prima ch'ella sia implementata. Li aiuta à identificà a capacità operativa massima di un sistema, i colli di bottiglia s'ellu ci hè, è a degradazione di u rendiment. I testi di carica di l'API sò generalmente fatti creendu utenti virtuali è poi aduprenduli per pruvà a funziunalità di l'API simultaneamente. 

I testi di carica di l'API misuranu metriche cum'è u tempu di risposta, l'utilizatori simultanei, i tassi di throughput, i livelli d'utilizazione di risorse, u tempu mediu trà fallimentu (MTBF), u tempu mediu per fallimentu (MTTF), etc. Tutte queste metriche ponu esse aduprate per determinà quantu l'API faci.

Tipi di prova di carica

Ci sò parechji tippi di teste di carica, ognunu cù i so casi d'usu. Fighjemu un ochju à alcuni di elli.

Test di carica: Questa hè a forma basica di una prova di carica. Hè utilizatu per valutà u rendiment di un sistema (in questu casu, una API) sottu a carica normale è a carica massima prevista.

Test di stress: Questu hè utilizatu per evaluà u rendiment di un sistema sottu una carica assai pisanti. L'obiettivu di sta prova hè di vede s'ellu un sistema si recupera dopu à fallimentu, è quantu tempu ci vole à fà. A carica hè generalmente aumentata lentamente finu à chì supera e capacità di u sistema.

Test di spike: Questu hè un pocu simili à a prova di stress, salvu chì a carica pesante hè appiicata di colpu, in uppusizione à a rampa lentamente. Stu tipu di teste rapprisenta ciò chì succede quandu ci hè un spike bruscu in u vostru numeru mediu di utilizatori o visitatori, o quandu ci hè un attaccu DDOS à u vostru sistema.

Test d'immersione: Questa prova hè sfarente di l'altri sopra. Mette u vostru sistema sottu à u 80% (o circa) di a carica normale è u lascia in funzione per un longu periodu, dì 12 à 14 ore. Stu tipu di teste determina quantu affidabile un sistema hè in u tempu.

Carica Pruvate e vostre API cù Locust

I sviluppatori anu accessu à una varietà di opzioni per a prova di carica di e so API. Certi strumenti di prova di carica cumuni sò Gatling, JMeter è Locust. Seremu focu annantu à Locust in questu articulu.

Locust hè un strumentu di prova di carica open-source basatu in python utilizatu da e prime cumpagnie cum'è Google, Microsoft è Riot Games per pruvà e so API. In questu articulu, vi dimustraremu cumu si carica a prova di una API. 

Per questu tutoriale, aghju da creà una API simplice cù Flask. Pudete seguità cun mè o solu creà a vostra API cù Node, o qualsiasi quadru chì site cunfortu.

Bisognu

pitone 3

Setup & Installation

Prima, avete bisognu di cunfigurà un ambiente virtuale in u vostru PC in modu chì ùn sguassate micca u vostru ambiente Python globale. Per fà quessa, eseguite i seguenti cumandamenti. Nota chì questi cumandamenti s'applicanu à un terminal Windows.

$ mkdir prughjettu

$ cd /d path\à\prughjettu

$ python -m venv venv

$ venv\Scripts\attivate

 

Prima, avemu creatu a prugettu annuariu. Dopu avemu cambiatu u nostru cartulare attuale à prugettu. Dopu avemu creatu è attivatu un ambiente virtuale per Python in quellu repertoriu. 

Avà, andemu à stallà Flask(U useremu per creà l'endpoints per esse pruvati di carica) è Locust iddu stissu. 

 

Per installà Flask, eseguite. Assicuratevi chì site in u prugettu induve avete creatu un ambiente virtuale.

$ pip install flask

 

Per installà Locust, eseguite

$ pip install locust

 

Una volta chì hè fattu, scrivite i seguenti cumandamenti. Assicuratevi chì site in u vostru prugettu annuariu quandu fate questu.

$ copia nul __init__.py

$ mkdir app

$ copia nul app\app.py

$ copia nul app\__init__.py

 

Questi cumandamenti creanu alcuni fugliali chì useremu per creà i nostri punti finali cù Flask. Pudete ancu creà questi schedari cù u vostru esploratore di schedari per via. Ma chì hè u divertimentu in questu? Una volta chì avete fattu questu, copiate u codice sottu app.py

from flask import Flask, jsonify, dumanda

app = Fiascu (__name__)

mudelli_cars = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

mudelli_aviò = [

  { 'brand': 'Boeing', 'model': '747' }

]

 

@app.route('/cars')

def get_cars():

  return jsonify (modelli di vittura)

@app.route('/planes')

def get_planes():

  return jsonify (modelli_piani)

if __name__ == '__main__':

    app.run (debug = True)  

 

U codice sopra cuntene un metudu get_cars utilizatu per ottene una lista di marche di vitture è i so mudelli, è get_planes utilizatu per ottene una lista di marche di aereo è i so mudelli. Per noi di carcà a prova di questu endpoint, avemu bisognu di eseguisce app.py. Per fà quessa, eseguite u cumandimu sottu.

$ python path\to\app.py

Una volta eseguite, duvete vede qualcosa cum'è questu:

Test de charge API 1

Se copiate l'URL da u terminal è scrive Cars or i piani dopu à u /, vi deve esse capaci di vede i dati ci. Tuttavia, u nostru scopu hè di pruvà l'endpoint cù locust, micca cù u navigatore. Allora facemu cusì. Eseguite u cumandimu seguitu in a ràdica di u vostru prugettu catalogo.

 

$ copia nul locust_test.py

 

Stu crea un schedariu 'locust_test.py' in a radica di u vostru prugettu annuariu. Una volta avete fattu questu, apre u schedariu è incollà in u codice sottu. Spiegheremu in pocu tempu.

 

tempu d'impurtazione

from locust import HttpUser, compitu, trà

 

Classe UserBehaviour (HttpUser):

    wait_time = trà (5, 10)

 

    @travagliu

    def get_cars (self):

        self.client.get('/cars')

    

    @travagliu

    def get_planes(self):

        self.client.get('/planes')

 

Questu hè un esempiu basicu di usu di Locust per carica una prova di API. Prima, creamu una classe Cumportamentu di l'Usuariu, chì pò esse datu qualsiasi nome appropritatu, ma deve estenderà HttpUser. HttpUser hè a classa chì si occupa di istanziari parechji utilizatori virtuale per eseguisce i travaglii chì avemu specificatu in u Cumportamentu di l'Usuariu burghisìa. 

Un compitu hè specificatu da decorate un metudu cù u @travagliu decoratore. Avemu dinò una funzione chjamata trà () chì ci permette di specificà un intervalu di seconde per aspittà prima di eseguisce u prossimu compitu. Pudete vede chì avemu assignatu un intervallu di 5 à 10 seconde per quellu in u nostru codice. 

Per eseguisce u codice, assicuratevi chì site sempre in u vostru ambiente virtuale. Se quellu chì avete creatu hè utilizatu da u servitore chì serve l'API, apre un novu terminal, cambia u vostru cartulare à u vostru prugettu directory, è attivate l'ambiente virtuale chì avete creatu. Pudete truvà u cumandimu per attivà un ambiente virtuale sopra. Avà, entre u cumandimu sottu in u vostru terminal.

 

$ locust -f locust_test.py

 

Duvete vede qualcosa cusì:

Test de charge API 2

Per automaticamente, l'interfaccia web di locust si trova à http://localhost/8089. Se visitate u situ web, duvete vede una interfaccia cusì:

Test de charge API 3

Da l'interfaccia, pudemu specificà u numeru di utilizatori, u tassu di spawn (utilizatori creati per seconda), è Host. Pudete ottene l'indirizzu di u vostru òspite cuntrollà u terminal induve u servitore hè in esecuzione. In u nostru casu, hè in u portu 5000. Quandu clicate Cuminciate à sbulicà, vi Mulateri Di L'esse prisentatu cù l'interfaccia sottu.

Test de charge API 4

Questu vi mostra diverse metriche utili, cum'è u numeru di richieste fallite, u tempu mediu per una dumanda, u tempu minimu per una dumanda, e dumande per seconda, etc. Una volta chì site cuntentu di ciò chì vede, pudete clicà nantu à u buttone di stop. 


In più di u statistiche tab, ci hè un Sei tabulazione chì mostra più nantu à u corsu in forma di graficu, cum'è l'imaghjini sottu.

Ci hè un richieste totali per secondu graficu, graficu di u tempu di risposta, e Graficu numeru di utilizatori, tuttu trama contra u tempu. Utilizendu i grafici, pudete determinà quanti utilizatori sò accettabili per un tempu di risposta fissu, o pudete osservà i vostri charts per un tempu di risposta constante malgradu un numeru crescente di utilizatori, è altre insights cusì. Se vulete sparte questi tutela cù qualcunu altru, pudete scaricà un rapportu da u Scaricatu Dati tabulazione.

Per cuncludi...

A prova di carica di a vostra API hè una attività cruciale in u vostru prucessu di sviluppu, dunque assicuratevi chì hè incorporatu in u vostru ciclu di cuncepimentu. A propositu, pudete ancu eseguisce altri tipi di teste di carica variendu i valori per u numeru di utilizatori è u tassu di spawn. 

Se vulete fà una prova di spike, specificate un grande valore (per dì 2000) per u numeru di utilizatori, è dopu un valore ugualmente grande per a vostra freccia di spawn (500 per esempiu). Questu significa chì in 4 seconde, avete tutti l'utilizatori 2000 creati è accede à i vostri punti finali. Una prova di stress serà simile, ma cù un valore assai più bassu per a tarifa di spawn. Per sapè tuttu ciò chì pudete fà, verificate u Locust ducumentazione in corsu