ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API me ka ʻūhini

ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API me ka ʻūhini

ʻO ka hoʻāʻo ʻana i ka hoʻouka ʻana o ka API me ka ʻūhini: Intro

Aia paha ʻoe i kēia kūlana ma mua: kākau ʻoe i ke code e hana ai i kekahi mea, kahi hopena no ka laʻana. E hoʻāʻo ʻoe i kāu hopena me ka Postman a i ʻole Insomnia, a maikaʻi nā mea a pau. Oe e hele ma ka hopena i ka mea kūʻai-ʻaoʻao mea hoʻomohala, a laila hoʻopau i ka API a hoʻolaha i ka noi. Akā, hāʻule ka API i ka wā e hoʻohana ai nā mea hoʻohana i ka app.

Hiki i kēia ke lilo i mea hoʻonāukiuki nui e komo ai, ʻaʻole e haʻi i ke kumu kūʻai no kahi ʻoihana. ʻO ia ke kumu e hoʻokō ai nā mea hoʻomohala polokalamu i nā hoʻokolohua like ʻole ma nā ʻōnaehana polokalamu e hōʻoia i kā lākou hana e like me ka mea i manaʻo ʻia. ʻAʻole ʻokoʻa nā API. Ma mua o ka hoʻolaha ʻana, pono ʻoe e hana i nā hoʻokolohua hoʻokō a me nā hoʻokolohua palekana.

Hiki ke hoʻohui ʻia nā hoʻokolohua hana i nā hoʻokolohua hana a me nā hoʻāʻo hoʻouka. ʻO nā hoʻokolohua hana ka mea āu e hoʻohana mau ai i ka Postman a i ʻole Insomnia. Hoʻopaʻa lākou i ka hana o kāu API e like me kāu e manaʻo ai. ʻO nā hoʻāʻo hoʻouka, ma ka ʻaoʻao ʻē aʻe, ʻoi aku ka hopohopo i ka hana ʻana o kāu API me ka hoʻohana ʻana i ka honua maoli a me ka haʻahaʻa kiʻekiʻe, a ʻo ia ka mea e pili ana i kēia ʻatikala. E nānā i nā ho'āʻo hoʻouka i nā kikoʻī hou aku.

He aha ka API Load Testing?

ʻO ka hoʻāʻo hoʻouka ʻana ʻo API kahi ʻano o ka hoʻāʻo ʻana i hoʻohana ʻia e nā mea hoʻomohala e hoʻohālikelike i ka haʻahaʻa maʻamau a me ke kiʻekiʻe ma nā wahi hopena. Hāʻawi kēia ʻano hoʻāʻo i nā mea hoʻomohala e loiloi i ka hana honua maoli o kahi API ma mua o ka hoʻoili ʻia ʻana. Hiki ke kōkua iā lākou e ʻike i ka nui o ka mana hana o kahi ʻōnaehana, bottlenecks inā loaʻa, a me ka hōʻino ʻana i ka hana. Hana ʻia nā hoʻāʻo hoʻouka API ma ka hana ʻana i nā mea hoʻohana virtual a laila hoʻohana iā lākou e hoʻāʻo i ka hana o ka API i ka manawa like. 

Ana nā ho'āʻo hoʻouka API i nā ana e like me ka manawa pane, nā mea hoʻohana like, ka helu throughput, nā pae hoʻohana waiwai, Mean Time Between Failure(MTBF), Mean Time To Failure (MTTF), a pēlā aku. Hiki ke hoʻohana ʻia kēia mau ana a pau e hoʻoholo ai i ka maikaʻi o ka hana ʻana o ka API.

Nā ʻano o ka hoʻāʻo ʻana

Nui nā ʻano o ka hoʻāʻo ukana, kēlā me kēia me kāna mau hihia hoʻohana. E nānā kākou i kekahi o lākou.

Hoʻāʻo hoʻouka: ʻO kēia ke ʻano kumu o ka hoʻāʻo hoʻouka. Hoʻohana ʻia ia e loiloi i ka hana o kahi ʻōnaehana (ma kēia hihia, he API) ma lalo o ka haʻawe maʻamau a me ka haʻawe kiʻekiʻe i manaʻo ʻia.

Ho'āʻo koʻikoʻi: Hoʻohana ʻia kēia e loiloi i ka hana o kahi ʻōnaehana ma lalo o kahi haʻahaʻa kaumaha loa. ʻO ka pahuhopu o kēia hoʻāʻo ʻana ʻo ia ka ʻike inā hoʻi hou ka ʻōnaehana ma hope o ka hāʻule ʻana, a pehea ka lōʻihi e hana ai pēlā. Hoʻonui mālie ʻia ka ukana a ʻoi aku i ka hiki o ka ʻōnaehana.

Hōʻike Spike: He ʻano like kēia me ka hoʻāʻo koʻikoʻi, koe wale nō ke kau ʻia ʻana o ka ukana kaumaha, ʻaʻole i ka hoʻolohi lohi ʻana. Hōʻike kēia ʻano hoʻāʻo i ka mea e hiki mai ana ke piʻi koke i kāu helu awelika o nā mea hoʻohana a i ʻole nā ​​​​mea kipa, a i ʻole he hoʻouka kaua DDOS ma kāu ʻōnaehana.

Hoʻāʻo Soak: ʻAʻole like kēia hoʻokolohua me nā mea ʻē aʻe ma luna. Hoʻokomo ia i kāu ʻōnaehana ma lalo o 80% (a i ʻole) o ka ukana maʻamau a waiho iā ia e holo no ka manawa lōʻihi, e ʻōlelo mai 12 a 14 mau hola. Hoʻoholo kēia ʻano hoʻāʻo i ka hilinaʻi o kahi ʻōnaehana i ka manawa.

Hoʻouka i kāu mau API me ka ʻūhini

Hiki i nā mea hoʻomohala ke komo i nā koho like ʻole no ka hoʻāʻo ʻana i kā lākou API. ʻO kekahi mau mea hana hoʻāʻo ukana maʻamau ʻo Gatling, JMeter, a me Locust. E nānā mākou iā Locust ma kēia ʻatikala.

ʻO Locust kahi mea hana hoʻāʻo hoʻāʻo open-source kumu python i hoʻohana ʻia e nā hui kiʻekiʻe e like me Google, Microsoft, a me Riot Games e hoʻāʻo i kā lākou API. Ma kēia ʻatikala, e hōʻike mākou pehea e hoʻouka ai i kahi hōʻike API. 

No kēia kumu aʻo, e hana wau i API maʻalahi me Flask. Hiki iā ʻoe ke hahai pū me aʻu a i ʻole e hana wale i kāu API me Node, a i ʻole nā ​​​​papahana āu e ʻoluʻolu ai.

koi

Python 3

Hoʻonohonoho & hoʻonoho

ʻO ka mea mua, pono ʻoe e hoʻonohonoho i kahi kaiapuni virtual ma kāu PC i ʻole ʻoe e hōʻino i kāu kaiapuni Python honua. No ka hana ʻana i kēlā, e holo i kēia mau kauoha. E hoʻomaopopo e pili ana kēia mau kauoha i kahi kikowaena Windows.

$ mkdir papahana

$ cd /d ala\i\papahana

$ python -m venv venv

$ venv\Scripts\activate

 

ʻO ka mua, ua hana mākou i kahi papahana papa kuhikuhi. A laila hoʻololi mākou i kā mākou papa kuhikuhi i kēia manawa i papahana. A laila hana mākou a hana i kahi kaiapuni virtual no Python i loko o kēlā papa kuhikuhi. 

I kēia manawa, e neʻe mākou i ke kau ʻana ʻO Flask(e hoʻohana mākou iā ia e hana i nā hopena e hoʻāʻo ʻia) a ʻĀpuhopū ia. 

 

E hoʻouka i ka Flask, holo. E hōʻoia ʻoe i loko o ka papahana kahi āu i hana ai i kahi kaiapuni virtual.

$ pip hoʻokomo i ka pahu

 

No ka hoʻouka ʻana iā Locust, holo

$ pip hoʻokomo ʻūhini

 

Pau kēlā, e kikokiko i kēia mau kauoha. E hōʻoia ʻoe i loko o kāu papahana papa kuhikuhi ke hana ʻoe i kēia.

$ kope nul __init__.py

$ mkdir polokalamu

$ kope nul app\app.py

$ kope nul app\__init__.py

 

Hoʻokumu kēia kauoha i kekahi mau faila a mākou e hoʻohana ai e hana i kā mākou hopena me ka hoʻohana ʻana iā Flask. Hiki iā ʻoe ke hana i kēia mau faila me ka hoʻohana ʻana i kāu faila file ma ke ala. Akā he aha ka mea leʻaleʻa i kēlā? Ke hana ʻoe i kēlā, e kope i ke code ma lalo nei polokalamu.py

mai flask import Flask, jsonify, noi

app = Flask(__name__)

kaʻa_models = [

  { 'hōʻailona': 'Tesla', 'model': 'Model S' }

]

 

mokulele_models = [

  { 'hōʻailona': 'Boeing', 'model': '747' }

]

 

@app.route('/cars')

def get_cars():

  hoʻihoʻi jsonify(car_models)

@app.route('/planes')

def get_planes ():

  hoʻihoʻi jsonify(plane_models)

inā __name__ =='__nui__':

    app.run(debug=ʻOiaʻiʻo)  

 

Aia i loko o ke code ma luna kahi ala loaʻa_kaʻa hoʻohana e kiʻi i ka papa inoa o nā hōʻailona kaʻa a me kā lākou mau hiʻohiʻona, a loaa_mau mokulele hoʻohana ʻia e kiʻi i ka papa inoa o nā hōʻailona mokulele a me kā lākou mau hiʻohiʻona. No mākou e hoʻouka i ka hoʻāʻo ʻana i kēia hopena, pono mākou e holo app.py. No ka hana ʻana e holo i ke kauoha ma lalo nei.

$ ala python\to\app.py

Ke holo ʻoe i kēlā, pono ʻoe e ʻike i kahi mea e like me kēia:

ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API 1

Inā ʻoe e kope i ka URL mai ka pahu a paʻi hi or nā mokulele ma hope o ka /, pono ʻoe e ʻike i ka ʻikepili ma laila. Eia naʻe, ʻo kā mākou pahuhopu e hoʻāʻo i ka hopena me ka ʻūhini, ʻaʻole me ka polokalamu kele pūnaewele. No laila e hana kāua. E holo i kēia kauoha ma ke kumu o kāu papahana papa kuhikuhi.

 

$ kope nul locust_test.py

 

Hoʻokumu kēia i kahi faila 'locust_test.py' i ke kumu o kāu papahana papa kuhikuhi. Ke hana ʻoe i kēlā, wehe i ka faila a hoʻopili i ke code ma lalo nei. E wehewehe koke mākou.

 

lawe manawa

mai ka uhini lawe mai HttpUser, hana, ma waena

 

papa UserBehaviour(HttpUser):

    kali_manawa = ma waena (5, 10)

 

    @hana

    def get_cars(self):

        self.client.get('/cars')

    

    @hana

    def get_planes(self):

        self.client.get('/planes')

 

He kumu kumu kēia o ka hoʻohana ʻana iā Locust e hoʻouka i kahi hoʻāʻo API. ʻO ka mua, hana mākou i kahi papa Mea hoʻohana, hiki ke hāʻawi i kekahi inoa kūpono akā pono e hoʻonui HttpUser. HttpUser ʻO ia ka papa e mālama pono ana i ka hoʻohana ʻana i nā mea hoʻohana virtual he nui e hoʻokō i nā hana a mākou i kuhikuhi ai i ka Mea hoʻohana papa. 

Hōʻike ʻia kahi hana ma ka hoʻonani ʻana i ke ʻano me ka @hana mea kāhiko. Loaʻa iā mākou kahi hana i kapa ʻia ma waena () hiki iā mākou ke kuhikuhi i kahi mau kekona e kali ai ma mua o ka hoʻokō ʻana i ka hana aʻe. Hiki iā ʻoe ke ʻike ua hāʻawi mākou i kahi ākea o 5 a 10 kekona no kēlā i kā mākou code. 

No ka holo ʻana i ke code, e hōʻoia ʻoe aia nō ʻoe i loko o kāu kaiapuni virtual. Inā hoʻohana ʻia ka mea āu i hana ai e ke kikowaena lawelawe i ka API, e wehe i kahi kikowaena hou, e hoʻololi i kāu papa kuhikuhi i kāu papahana papa kuhikuhi, a ho'ā i ke kaiapuni virtual āu i hana ai. Hiki iā ʻoe ke loaʻa ke kauoha no ka hoʻāla ʻana i kahi kaiapuni virtual ma luna. I kēia manawa, e hoʻokomo i ke kauoha ma lalo nei i kāu kikowaena.

 

$ ʻūhini -f locust_test.py

 

E ʻike ʻoe i kekahi mea e like me kēia:

ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API 2

Ma ka paʻamau, aia ka ʻūhini pūnaewele ma http://localhost/8089. Inā ʻoe e kipa i ka pūnaewele, pono ʻoe e ʻike i kahi interface e like me kēia:

ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API 3

Mai ka interface, hiki iā mākou ke kuhikuhi i ka helu o nā mea hoʻohana, spawn rate (mea hoʻohana i hana ʻia i kēlā me kēia kekona), a me Host. Hiki iā ʻoe ke loaʻa ka helu wahi o kāu mea hoʻokipa ma ka nānā ʻana i ka pahu kahi e holo ai ke kikowaena. I kā mākou hihia, aia ma ke awa 5000. Ke kaomi ʻoe E hoʻomaka i ka ʻōhua, e hōʻike ʻia ʻoe me ka interface ma lalo.

ʻO ka hoʻāʻo ʻana o ka hoʻouka ʻana o ka API 4

Hōʻike kēia iā ʻoe i nā ana pono like ʻole e like me ka nui o nā noi i hāʻule ʻole, ka manawa maʻamau no kahi noi, ka manawa liʻiliʻi no kahi noi, nā noi i kekona, a pēlā aku. Ke māʻona ʻoe i nā mea āu e ʻike ai, hiki iā ʻoe ke kaomi i ke pihi hooki. 


Ma waho o ka LIKE tab, aia he nńnń tab e hōʻike hou aku ike ma ke ʻano o ka pakuhi, e like me ke kiʻi ma lalo nei.

Aia no he huina noi no ka pakuhi kekona, pakuhi manawa pane, a kiʻi helu o nā mea hoʻohana, hoʻolālā nā mea a pau i ka manawa. Me ka hoʻohana ʻana i nā pakuhi, hiki iā ʻoe ke hoʻoholo i ka nui o nā mea hoʻohana i ʻae ʻia no ka manawa pane paʻa, a i ʻole hiki iā ʻoe ke nānā i kāu mau pakuhi no ka manawa pane mau ʻoiai ka nui o nā mea hoʻohana, a me nā ʻike ʻē aʻe e like me ia. Inā makemake ʻoe e kaʻana like i kēia mau mea LIKE me kekahi mea ʻē aʻe, hiki iā ʻoe ke hoʻoiho i kahi hōʻike mai ka Hoʻoiho i ka ʻikepili papa.

Hoʻopau...

He hana koʻikoʻi ka hoʻāʻo ʻana i kāu API i kāu kaʻina hana hoʻomohala, no laila e ʻike pono ua hoʻokomo ʻia i kāu pōʻai hoʻolālā. Ma ke ala, hiki iā ʻoe ke hoʻokō i nā ʻano hoʻāʻo ʻē aʻe ma ka hoʻololi ʻana i nā waiwai no ka helu o nā mea hoʻohana a me ka spawn rate. 

Inā makemake ʻoe e hana i kahi hoʻāʻo spike, e kuhikuhi i kahi waiwai nui (e ʻōlelo 2000) no ka helu o nā mea hoʻohana, a laila i kahi waiwai like nui no kāu helu spawn (500 no ka laʻana). 'O ia ho'i, i loko o 4 kekona, loa'a iā 'oe nā mea ho'ohana 2000 a pau i hana a komo i kāu mau wahi hope. E like ana ka ho'āʻo koʻikoʻi, akā me ka haʻahaʻa haʻahaʻa loa no ka helu spawn. No ka ʻike ʻana i nā mea a pau āu e hana ai, e nānā i ka Locust palapala kuhikuhi