API-ladingstoetsing met sprinkaan

API-ladingstoetsing met sprinkaan

API-ladingstoetsing met sprinkaan: Inleiding

Jy was waarskynlik al voorheen in hierdie situasie: jy skryf kode wat iets doen, byvoorbeeld 'n eindpunt. Jy toets jou eindpunt met Postman of Insomnia, en alles werk goed. Jy gee die eindpunt deur aan die kliënt-kant ontwikkelaar, wat dan die verbruik API en ontplooi die toepassing. Maar dan misluk die API wanneer die gebruikers die toepassing gebruik.

Dit kan 'n uiters irriterende situasie wees om in te wees, om nie eens te praat van duur vir 'n besigheid nie. Dit is waarom sagteware-ontwikkelaars 'n verskeidenheid toetse op sagtewarestelsels uitvoer om te verseker dat hulle werk soos verwag. API's is nie anders nie. Voor ontplooiing moet u ten minste prestasietoetse en sekuriteitstoetse doen.

Prestasietoetse kan in funksionaliteitstoetse en lastoetse gegroepeer word. Funksionaliteitstoetse is waarvoor jy gewoonlik Postman of Insomnia gebruik. Hulle verseker dat jou API funksioneer soos jy verwag. Vragtoetse, aan die ander kant, is meer besorg oor hoe u API presteer met werklike gebruik en pieklading, en dit is waaroor hierdie artikel gaan. Kom ons kyk na lastoetse in meer besonderhede.

Wat is API-ladingstoetsing?

API-ladingstoetsing is 'n tipe toets wat ontwikkelaars gebruik om normale en pieklading op eindpunte te simuleer. Hierdie soort toetsing stel ontwikkelaars in staat om die werklike werkverrigting van 'n API te evalueer voordat dit ontplooi word. Dit help hulle om die maksimum bedryfskapasiteit van 'n stelsel, knelpunte indien enige, en prestasie-agteruitgang te identifiseer. API-ladingstoetse word gewoonlik gedoen deur virtuele gebruikers te skep en dit dan te gebruik om die API se funksionaliteit gelyktydig uit te toets. 

API-ladingstoetse meet metrieke soos reaksietyd, gelyktydige gebruikers, deurvloeitempo's, hulpbronbenuttingsvlakke, gemiddelde tyd tussen mislukking (MTBF), gemiddelde tyd tot mislukking (MTTF), ensovoorts. Al hierdie maatstawwe kan gebruik word om te bepaal hoe goed die API vaar.

Tipes vragtoetsing

Daar is verskeie tipes lastoetsing, elk met sy gebruiksgevalle. Kom ons kyk na sommige van hulle.

Ladingtoetsing: Dit is die basiese vorm van 'n lastoets. Dit word gebruik om die werkverrigting van 'n stelsel (in hierdie geval 'n API) onder normale las en verwagte pieklading te evalueer.

Strestoetsing: Dit word gebruik om die werkverrigting van 'n stelsel onder 'n baie swaar las te evalueer. Die doel van hierdie toets is om te sien of 'n stelsel herstel na mislukking, en hoe lank dit neem om dit te doen. Die vrag word gewoonlik stadig verhoog totdat dit die vermoëns van die stelsel oorskry.

Spike toets: Dit is 'n bietjie soortgelyk aan strestoetsing, behalwe dat swaar las skielik toegepas word, in plaas daarvan om dit stadig te verhoog. Hierdie soort toets verteenwoordig wat gebeur wanneer daar 'n skielike styging in jou gemiddelde aantal gebruikers of besoekers is, of wanneer daar 'n DDOS-aanval op jou stelsel is.

Week toets: Hierdie toets is anders as die ander hierbo. Dit plaas jou stelsel onder 80% (of ongeveer) van normale las en laat dit vir 'n lang tydperk aan die gang wees, sê 12 tot 14 uur. Hierdie soort toets bepaal hoe betroubaar 'n stelsel oor tyd is.

Laai die toets van u API's met sprinkaan

Ontwikkelaars het toegang tot 'n verskeidenheid opsies om hul API's te toets. Sommige algemene lastoetsinstrumente is Gatling, JMeter en Locust. Ons sal in hierdie artikel op Sprinkaan fokus.

Locust is 'n python-gebaseerde oopbron-ladingtoetsinstrument wat deur topmaatskappye soos Google, Microsoft en Riot Games gebruik word om hul API's te toets. In hierdie artikel sal ons demonstreer hoe om 'n API te laai. 

Vir hierdie tutoriaal sal ek 'n eenvoudige API met Flask skep. Jy kan saam met my volg of net jou API skep met Node, of watter raamwerk jy ook al gemaklik mee is.

Vereistes

Python 3

Opstelling en installasie

Eerstens moet jy 'n virtuele omgewing op jou rekenaar opstel sodat jy nie jou globale Python-omgewing mors nie. Om dit te doen, voer die volgende opdragte uit. Let daarop dat hierdie opdragte van toepassing is op 'n Windows-terminaal.

$ mkdir projek

$ cd /d pad\na\projek

$ luislang -m venv venv

$ venv\Scripts\aktiveer

 

Eerstens het ons 'n geskep projek gids. Toe het ons ons huidige gids verander na projek. Ons het toe 'n virtuele omgewing vir Python in daardie gids geskep en geaktiveer. 

Nou gaan ons voort met die installering Fles(ons sal dit gebruik om die eindpunte te skep wat getoets moet word) en sprinkaan self. 

 

Om Flask te installeer, hardloop. Maak seker jy is in die projek waar jy 'n virtuele omgewing geskep het.

$ pip installeer fles

 

Om Locust te installeer, hardloop

$ pip installeer sprinkaan

 

Sodra dit gedoen is, tik die volgende opdragte in. Maak seker jy is in jou projek gids wanneer jy dit doen.

$ kopie nul __init__.py

$ mkdir toepassing

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Hierdie opdragte skep 'n paar lêers wat ons sal gebruik om ons eindpunte met behulp van Flask te skep. Jy kan ook hierdie lêers skep met jou lêerverkenner terloops. Maar wat is die pret daarin? Sodra jy dit gedoen het, kopieer die onderstaande kode na app.py

vanaf fles invoer Fles, jsonify, versoek

app = Fles(__naam__)

motormodelle = [

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

]

 

vliegtuigmodelle = [

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

]

 

@app.route('/motors')

def get_cars():

  gee jsonify (motormodelle) terug

@app.route('/vliegtuie')

def get_planes():

  gee jsonify (plane_models) terug

as __name__ == '__ main__':

    app.run(debug=True)  

 

Bogenoemde kode bevat 'n metode kry_motors gebruik om 'n lys van motor handelsmerke en hul modelle te kry, en kry_vliegtuie gebruik om 'n lys van vliegtuighandelsmerke en hul modelle te kry. Vir ons om hierdie eindpunt te laai, moet ons app.py laat loop. Om dit te doen, voer die onderstaande opdrag uit.

$ python pad\na\app.py

Sodra jy dit uitgevoer het, behoort jy iets soos hierdie te sien:

API-ladingstoets 1

As jy die URL vanaf die terminale kopieer en tik motors or vliegtuie na die /, behoort jy die data daar te kan sien. Ons doel is egter om die eindpunt met sprinkaan te toets, nie met die blaaier nie. So kom ons doen dit. Voer die volgende opdrag in die wortel van jou projek gids.

 

$ kopie nul locust_test.py

 

Dit skep 'n 'locust_test.py'-lêer in die wortel van jou projek gids. Sodra jy dit gedoen het, maak die lêer oop en plak die onderstaande kode in. Ons sal dit binnekort verduidelik.

 

invoertyd

van sprinkaan invoer HttpUser, taak, tussen

 

klas Gebruikersgedrag (HttpGebruiker):

    wag_tyd = tussen(5, 10)

 

    @taak

    def kry_motors(self):

        self.client.get('/cars')

    

    @taak

    def get_planes(self):

        self.client.get('/planes')

 

Dit is 'n basiese voorbeeld van die gebruik van Locust om 'n API te laai. Eerstens skep ons 'n klas Gebruikersgedrag, wat enige gepaste naam gegee kan word, maar moet uitbrei HttpGebruiker. HttpGebruiker is die klas wat sorg vir die instansieer van verskeie virtuele gebruikers om die take wat ons spesifiseer in die Gebruikersgedrag klas. 

'n Taak word gespesifiseer deur 'n metode te versier met die @taak versierder. Ons het ook 'n funksie genoem tussen() wat ons in staat stel om 'n reeks sekondes te spesifiseer om voor te wag voordat die volgende taak uitgevoer word. U kan sien dat ons 'n reeks van 5 tot 10 sekondes daarvoor in ons kode toegewys het. 

Om die kode te laat loop, maak seker dat jy steeds in jou virtuele omgewing is. As die een wat jy geskep het, gebruik word deur die bediener wat die API bedien, maak 'n nuwe terminaal oop, verander jou gids na jou projek gids, en aktiveer die virtuele omgewing wat jy geskep het. U kan die opdrag vir die aktivering van 'n virtuele omgewing hierbo vind. Voer nou die onderstaande opdrag in jou terminaal in.

 

$ sprinkaan -f sprinkaan_test.py

 

U moet so iets sien:

API-ladingstoets 2

By verstek is sprinkaan se webkoppelvlak by http://localhost/8089 geleë. As jy die webwerf besoek, behoort jy 'n koppelvlak soos hierdie te sien:

API-ladingstoets 3

Vanuit die koppelvlak kan ons die aantal gebruikers, spawn rate (gebruikers geskep per sekonde) en Gasheer spesifiseer. U kan die adres van u gasheer kry deur die terminaal waar die bediener loop, na te gaan. In ons geval is dit by poort 5000. Wanneer jy op klik Begin swerm, jy sal die koppelvlak hieronder aangebied word.

API-ladingstoets 4

Dit wys jou verskeie nuttige maatstawwe soos die aantal mislukte versoeke, gemiddelde tyd vir 'n versoek, die minimum tyd vir 'n versoek, versoeke per sekonde, ensovoorts. Sodra jy tevrede is met wat jy sien, kan jy op die stop-knoppie klik. 


Behalwe die Statistiek oortjie, daar is 'n kaarte oortjie wat meer wys inligting in die vorm van 'n grafiek, soos die prent hieronder.

Daar is 'n totale versoeke per sekonde grafiek, reaksie tyd grafiek, en aantal gebruikers grafiek, alles saamgevat teen tyd. Deur die grafieke te gebruik, kan jy bepaal hoeveel gebruikers aanvaarbaar is vir 'n vaste reaksietyd, of jy kan jou grafieke waarneem vir 'n konstante reaksietyd ten spyte van 'n toenemende aantal gebruikers, en ander insigte soos daardie. As jy hierdie wil deel stats met iemand anders, kan jy 'n verslag van die aflaai Laai data af Tab.

Om af te sluit...

Ladingstoetsing van jou API is 'n deurslaggewende aktiwiteit in jou ontwikkelingsproses, so maak seker dat dit in jou ontwerpsiklus ingesluit is. Terloops, u kan ook ander tipes vragtoetse uitvoer deur die waardes vir die aantal gebruikers en die spoedtempo te verander. 

As jy 'n piektoets wil doen, spesifiseer 'n groot waarde (sê 2000) vir die aantal gebruikers, en dan 'n ewe groot waarde vir jou spawn-koers (byvoorbeeld 500). Dit beteken dat jy binne 4 sekondes al 2000 gebruikers sal skep en toegang tot jou eindpunte kry. 'n Strestoets sal soortgelyk wees, maar met 'n baie laer waarde vir die kuittempo. Om uit te vind alles wat jy kan doen, kyk na die sprinkaan dokumentasie

Omseil TOR-sensuur

Omseil internetsensuur met TOR

Omseil internetsensuur met TOR Inleiding In 'n wêreld waar toegang tot inligting toenemend gereguleer word, het nutsmiddels soos die Tor-netwerk deurslaggewend geword vir

Lees meer »