Pagsulay sa Pag-load sa API Uban sa Dula

Pagsulay sa Pag-load sa API Uban sa Dula

API Load Testing Uban sa Dula: Intro

Tingali naa ka sa kini nga sitwasyon kaniadto: nagsulat ka og code nga adunay usa ka butang, usa ka endpoint pananglitan. Gisulayan nimo ang imong endpoint gamit ang Postman o Insomnia, ug maayo ang tanan. Imong ipasa ang endpoint ngadto sa developer sa kilid sa kliyente, kinsa unya mogamit sa API ug nag-deploy sa aplikasyon. Apan unya, ang API napakyas kung gigamit sa mga tiggamit ang app.

Kini mahimo nga usa ka super makalagot nga sitwasyon nga anaa, wala pay labot ang gasto sa usa ka negosyo. Kini ang hinungdan ngano nga ang mga nag-develop sa software nagpahigayon usa ka lainlaing mga pagsulay sa mga sistema sa software aron masiguro nga kini molihok sama sa gipaabut. Ang mga API walay kalainan. Sa dili pa i-deploy, kinahanglan nimo nga buhaton ang labing menos mga pagsulay sa pasundayag ug mga pagsulay sa seguridad.

Ang mga pagsulay sa pasundayag mahimong igrupo sa mga pagsulay sa pagpaandar ug mga pagsulay sa pagkarga. Ang mga pagsulay sa pag-andar mao ang kasagaran nimong gigamit nga Postman o Insomnia. Gisiguro nila nga ang imong API molihok sama sa imong gipaabut. Ang mga pagsulay sa pag-load, sa laing bahin, mas nabalaka sa kung giunsa ang imong API naglihok sa tinuod nga kalibutan nga paggamit ug peak load, ug kana ang bahin sa kini nga artikulo. Atong tan-awon ang mga pagsulay sa pagkarga sa mas detalyado.

Unsa ang Pagsulay sa Pag-load sa API?

Ang pagsulay sa pagkarga sa API usa ka klase sa pagsulay nga gigamit sa mga developer aron ma-simulate ang normal ug peak load sa mga endpoint. Kini nga matang sa pagsulay nagtugot sa mga developer sa pagtimbang-timbang sa tinuod nga kalibutan nga performance sa usa ka API sa wala pa kini i-deploy. Nakatabang kini kanila sa pag-ila sa labing taas nga kapasidad sa pag-operate sa usa ka sistema, mga bottleneck kung naa man, ug pagkadaot sa pasundayag. Ang mga pagsulay sa pagkarga sa API kasagarang gihimo pinaagi sa pagmugna og mga virtual nga tiggamit ug dayon gamiton kini aron dungan nga sulayan ang pagpaandar sa API. 

Ang mga pagsulay sa pagkarga sa API nagsukod sa mga sukatan sama sa oras sa pagtubag, dungan nga mga tiggamit, mga rate sa throughput, lebel sa paggamit sa kapanguhaan, Mean Time Between Failure(MTBF), Mean Time To Failure(MTTF), ug uban pa. Ang tanan niini nga mga sukatan mahimong magamit aron mahibal-an kung unsa ka maayo ang nahimo sa API.

Mga Matang sa Pagsulay sa Load

Adunay daghang mga klase sa pagsulay sa pagkarga, ang matag usa adunay mga kaso sa paggamit niini. Atong tan-awon ang pipila niini.

Pagsulay sa load: Kini ang sukaranan nga porma sa usa ka pagsulay sa pagkarga. Gigamit kini sa pagtimbang-timbang sa performance sa usa ka sistema(niini nga kaso, usa ka API) ubos sa normal nga load ug gipaabot nga peak load.

Pagsulay sa Stress: Kini gigamit sa pagtimbang-timbang sa performance sa usa ka sistema ubos sa usa ka bug-at kaayo nga load. Ang tumong niini nga pagsulay mao ang pagtan-aw kon ang usa ka sistema maulian human sa kapakyasan, ug unsa kadugay ang gikinahanglan aron mahimo kini. Ang load kasagaran hinay-hinay nga ramped hangtod kini molapas sa mga kapabilidad sa sistema.

Pagsulay sa Spike: Kini mao ang usa ka gamay nga susama sa stress testing, gawas sa bug-at nga load kalit nga gigamit, sukwahi sa hinay-hinay ramping up. Kini nga matang sa pagsulay nagrepresentar kung unsa ang mahitabo kung adunay kalit nga pagtaas sa imong kasagaran nga gidaghanon sa mga tiggamit o bisita, o kung adunay pag-atake sa DDOS sa imong sistema.

Pagsusi sa Soak: Kini nga pagsulay dili sama sa uban sa ibabaw. Gibutang niini ang imong sistema sa ilawom sa 80% (o hapit) sa normal nga karga ug gipadagan kini sa taas nga panahon, ingnon ta 12 hangtod 14 ka oras. Kini nga matang sa pagsulay nagtino kung unsa ka kasaligan ang usa ka sistema sa paglabay sa panahon.

I-load ang Pagsulay sa Imong mga API Gamit ang Dula

Ang mga developers adunay access sa lain-laing mga opsyon alang sa load testing sa ilang mga API. Ang pila ka sagad nga gamit sa pagsulay sa pagkarga mao ang Gatling, JMeter, ug Locust. Atong ipunting ang dulon sa kini nga artikulo.

Ang Locust usa ka python-based nga open-source load testing tool nga gigamit sa mga nag-unang kompanya sama sa Google, Microsoft, ug Riot Games aron sulayan ang ilang mga API. Niini nga artikulo, ipakita namon kung giunsa ang pagkarga sa pagsulay sa usa ka API. 

Alang sa kini nga panudlo, maghimo ako usa ka yano nga API nga adunay Flask. Mahimo nimong sundon uban kanako o paghimo lang sa imong API gamit ang Node, o bisan unsang balangkas nga komportable ka.

Kinahanglanon

Python 3

Pag-setup ug Pag-instalar

Una, kinahanglan nimo nga magbutang usa ka virtual nga palibot sa imong PC aron dili nimo masamok ang imong global nga palibot sa Python. Aron mahimo kana, pagdagan ang mosunud nga mga mando. Timan-i nga kini nga mga sugo magamit sa usa ka Windows terminal.

$ mkdir nga proyekto

$ cd /d dalan\sa\proyekto

$ python -m venv venv

$ venv\Scripts\activate

 

Una, naghimo kami og a proyekto direktoryo. Unya giusab namo ang among kasamtangan nga direktoryo sa proyekto. Naghimo kami ug gi-aktibo ang usa ka virtual nga palibot alang sa Python sa sulod sa kana nga direktoryo. 

Karon, magpadayon kita sa pag-instalar Flask(gamiton nato kini sa paghimo sa mga endpoint nga masulayan sa load) ug Dapit sa iyang kaugalingon. 

 

Aron ma-install ang Flask, pagdagan. Siguradoha nga naa ka sa proyekto diin naghimo ka usa ka virtual nga palibot.

$ pip instalar nga flask

 

Aron ma-install ang Locust, pagdagan

$ pip instalar dulon

 

Kung nahuman na kana, i-type ang mosunud nga mga mando. Siguradoha nga naa ka sa imong proyekto direktoryo kung buhaton nimo kini.

$ copy nul __init__.py

$ mkdir nga app

$kopya nul app\app.py

$ copy nul app\__init__.py

 

Kini nga mga sugo nagmugna og pipila ka mga file nga among gamiton sa paghimo sa among mga endpoint gamit ang Flask. Mahimo usab nimo kini nga mga file gamit ang imong file explorer sa paagi. Apan unsa ang makalingaw niana? Kung nahuman na nimo kana, kopyaha ang code sa ubos app.py

gikan sa flask import Flask, jsonify, hangyo

app = Flask(__ngalan__)

mga modelo sa sakyanan = [

  { 'brand': 'Tesla', 'modelo': 'Modelo S' }

]

 

eroplano_modelo = [

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

]

 

@app.route('/mga sakyanan')

def get_cars():

  ibalik ang jsonify(car_models)

@app.route('/eroplano')

def get_planes():

  ibalik ang jsonify(plane_models)

kung __ngalan__ == '__main__':

    app.run(debug=Tinuod)  

 

Ang code sa ibabaw adunay usa ka pamaagi pagkuha_mga sakyanan gigamit aron makakuha usa ka lista sa mga tatak sa awto ug ang ilang mga modelo, ug pagkuha_mga ayroplano gigamit aron makakuha usa ka lista sa mga tatak sa eroplano ug ang ilang mga modelo. Aron ma-load ang pagsulay niini nga endpoint, kinahanglan namon nga modagan ang app.py. Aron mahimo kana pagdagan ang mando sa ubos.

$ python path\to\app.py

Kung gipadagan nimo kana, kinahanglan nimo nga makita ang usa ka butang nga sama niini:

Pagsulay sa Pag-load sa API 1

Kung imong kopyahon ang URL gikan sa terminal ug i-type sakyanan or mga eroplano pagkahuman sa /, kinahanglan nimo nga makita ang datos didto. Bisan pa, ang among katuyoan mao ang pagsulay sa katapusan sa dulon, dili sa browser. Busa buhaton nato kana. Pagdalagan ang mosunod nga sugo sa gamut sa imong proyekto directory.

 

$ copy nul locust_test.py

 

Naghimo kini og 'locust_test.py' nga payl sa gamut sa imong proyekto direktoryo. Kung nahuman na nimo kana, ablihi ang file ug idikit ang code sa ubos. Atong isaysay kini sa dili madugay.

 

oras sa pag-import

gikan sa dulon import HttpUser, buluhaton, sa taliwala sa

 

klase UserBehaviour(HttpUser):

    wait_time = tali sa(5, 10)

 

    @ buluhaton

    def get_cars(kaugalingon):

        self.client.get('/cars')

    

    @ buluhaton

    def get_planes(kaugalingon):

        self.client.get('/planes')

 

Kini usa ka sukaranan nga pananglitan sa paggamit sa Locust aron ma-load ang pagsulay sa usa ka API. Una, maghimo kami usa ka klase Gawi sa Gumagamit, nga mahimong hatagan sa bisan unsang angay nga ngalan apan kinahanglan nga ipadayon HttpUser. HttpUser mao ang klase nga nag-atiman sa pag-instantiate sa daghang mga virtual nga tiggamit aron mahimo ang mga buluhaton nga among gitakda sa Gawi sa Gumagamit klase. 

Ang usa ka buluhaton gipiho pinaagi sa pagdekorasyon sa usa ka paagi sa @ buluhaton dekorador. Naa pud mi function nga gitawag tali sa () nga nagtugot kanato sa pagpiho sa usa ka han-ay sa mga segundo nga hulaton sa dili pa ipatuman ang sunod nga buluhaton. Imong makita nga gi-assign namo ang 5 hangtod 10 segundos para niana sa among code. 

Aron mapadagan ang code, siguroha nga naa ka pa sa imong virtual nga palibot. Kung ang imong gibuhat gigamit sa server nga nagserbisyo sa API, pag-abli og bag-ong terminal, usba ang imong direktoryo sa imong proyekto direktoryo, ug i-aktibo ang virtual nga palibot nga imong gibuhat. Makita nimo ang sugo alang sa pagpaaktibo sa usa ka virtual nga palibot sa ibabaw. Karon, pagsulod sa ubos nga sugo sa imong terminal.

 

$ dulon -f locust_test.py

 

Makita nimo ang usa ka butang nga sama niini:

Pagsulay sa Pag-load sa API 2

Sa kasagaran, ang web interface sa dulon nahimutang sa http://localhost/8089. Kung mobisita ka sa website, kinahanglan nimo nga makita ang usa ka interface nga sama niini:

Pagsulay sa Pag-load sa API 3

Gikan sa interface, mahimo natong ipiho ang gidaghanon sa mga tiggamit, spawn rate (mga tiggamit nga gihimo kada segundo), ug Host. Makuha nimo ang adres sa imong host pinaagi sa pagsusi sa terminal diin nagdagan ang server. Sa among kaso, kini anaa sa port 5000. Sa diha nga ikaw nag-klik sa Magsugod sa pagpanuhop, ipakita kanimo ang interface sa ubos.

Pagsulay sa Pag-load sa API 4

Gipakita niini kanimo ang lainlaing mapuslanon nga mga sukatan sama sa gidaghanon sa napakyas nga mga hangyo, kasagaran nga oras alang sa usa ka hangyo, ang minimum nga oras alang sa usa ka hangyo, mga hangyo matag segundo, ug uban pa. Sa higayon nga matagbaw ka sa imong nakita, mahimo nimong i-klik ang stop button. 


Gawas sa Statistics tab, adunay usa ka tsart tab nga nagpakita ug dugang impormasyon sa porma sa usa ka graph, sama sa hulagway sa ubos.

Adunay usa ka kinatibuk-ang mga hangyo matag segundo nga graph, graph sa oras sa pagtubag, ug gidaghanon sa mga tiggamit graph, ang tanan naglaraw batok sa panahon. Gamit ang mga graph, mahimo nimong mahibal-an kung pila ka mga tiggamit ang madawat alang sa usa ka piho nga oras sa pagtubag, o mahimo nimong obserbahan ang imong mga tsart sa kanunay nga oras sa pagtubag bisan pa sa nagkadaghan nga mga tiggamit, ug uban pang mga panan-aw nga sama niana. Kung gusto nimo ipaambit kini stats uban sa laing tawo, maka-download ka og report gikan sa Pag-download sa Data tab.

Sa pagtapos...

Ang pagsulay sa pag-load sa imong API usa ka hinungdanon nga kalihokan sa imong proseso sa pag-uswag, busa siguroha nga kini gilakip sa imong siklo sa disenyo. Pinaagi sa dalan, mahimo usab nimo nga himuon ang uban pang mga tipo sa pagsulay sa pagkarga pinaagi sa pag-iba-iba sa mga kantidad alang sa gidaghanon sa mga tiggamit ug rate sa spawn. 

Kung gusto nimo maghimo usa ka pagsulay sa spike, itakda ang usa ka dako nga kantidad (ingon 2000) alang sa gidaghanon sa mga tiggamit, ug dayon usa ka parehas nga kadako nga kantidad alang sa imong spawn rate (pananglitan 500). Nagpasabot kini nga sa 4 segundos, mahimo nimo ang tanan nga 2000 nga tiggamit ug ma-access ang imong mga endpoint. Ang usa ka stress test mahimong susama, apan adunay mas ubos nga kantidad alang sa spawn rate. Aron mahibal-an ang tanan nimong mahimo, tan-awa ang Dula dokumentasyon