API-ի բեռնման փորձարկում Locust-ով
API-ի բեռնման փորձարկում Locust-ով. Ներածություն
Դուք հավանաբար նախկինում եղել եք այս իրավիճակում. դուք գրում եք կոդ, որն ինչ-որ բան է անում, օրինակ՝ վերջնակետ: Դուք փորձարկում եք ձեր վերջնակետը՝ օգտագործելով Postman կամ Insomnia, և ամեն ինչ լավ է աշխատում: Դուք վերջնակետը փոխանցում եք հաճախորդի կողմից մշակողին, որն այնուհետև սպառում է այն API և տեղադրում է հավելվածը: Բայց հետո, API-ն ձախողվում է, երբ օգտվողներն օգտագործում են հավելվածը:
Սա կարող է լինել գերծանրքաշային իրավիճակում հայտնվելը, էլ չեմ խոսում բիզնեսի համար ծախսատար վիճակում: Ահա թե ինչու ծրագրային ապահովման մշակողները տարբեր թեստեր են իրականացնում ծրագրային համակարգերի վրա՝ համոզվելու համար, որ դրանք կատարում են սպասվածի պես: API-ները տարբեր չեն: Նախքան տեղակայումը, դուք պետք է կատարեք առնվազն կատարողականի թեստեր և անվտանգության թեստեր:
Կատարման թեստերը կարող են խմբավորվել ֆունկցիոնալության թեստերի և բեռի թեստերի: Ֆունկցիոնալության թեստերն այն են, ինչի համար սովորաբար օգտագործում եք Փոստատարը կամ Անքնություն: Նրանք ապահովում են, որ ձեր API-ն գործի այնպես, ինչպես դուք ակնկալում եք: Մյուս կողմից, բեռնվածության թեստերն ավելի շատ վերաբերում են այն բանին, թե ինչպես է ձեր API-ն աշխատում իրական աշխարհում օգտագործման և առավելագույն ծանրաբեռնվածության հետ, և դա այն է, ինչի մասին է այս հոդվածը: Եկեք ավելի մանրամասն նայենք բեռի թեստերին:
Ի՞նչ է API-ի բեռնման փորձարկումը:
API-ի բեռնվածության փորձարկումը փորձարկման մի տեսակ է, որն օգտագործում են մշակողները՝ վերջնական կետերում նորմալ և գագաթնակետային բեռը մոդելավորելու համար: Այս տեսակի թեստավորումը թույլ է տալիս ծրագրավորողներին գնահատել API-ի իրական կատարողականությունը նախքան դրա գործարկումը: Այն օգնում է նրանց բացահայտել համակարգի առավելագույն գործառնական հզորությունը, խոչընդոտները, եթե այդպիսիք կան, և կատարողականի վատթարացումը: API-ի բեռնման թեստերը սովորաբար կատարվում են՝ ստեղծելով վիրտուալ օգտատերեր և այնուհետև դրանք օգտագործելով՝ միաժամանակ API-ի ֆունկցիոնալությունը ստուգելու համար:
API-ի բեռնվածության թեստերը չափում են այնպիսի չափումներ, ինչպիսիք են արձագանքման ժամանակը, միաժամանակ օգտագործողները, թողունակության տեմպերը, ռեսուրսների օգտագործման մակարդակները, ձախողման միջև ընկած միջին ժամանակը (MTBF), ձախողման միջին ժամանակը (MTTF) և այլն: Այս բոլոր ցուցանիշները կարող են օգտագործվել՝ որոշելու համար, թե որքան լավ է գործում API-ն:
Բեռի փորձարկման տեսակները
Բեռի փորձարկման մի քանի տեսակներ կան, որոնցից յուրաքանչյուրն ունի իր օգտագործման դեպքերը: Եկեք նայենք դրանցից մի քանիսին:
Բեռնման փորձարկում. Սա ծանրաբեռնվածության փորձարկման հիմնական ձևն է: Այն օգտագործվում է համակարգի (այս դեպքում՝ API-ի) աշխատանքը գնահատելու համար նորմալ բեռի և սպասվող առավելագույն ծանրաբեռնվածության պայմաններում:
Սթրեսի թեստավորում. Սա օգտագործվում է շատ ծանր բեռի տակ համակարգի աշխատանքը գնահատելու համար: Այս թեստի նպատակն է տեսնել, թե արդյոք համակարգը վերականգնվում է ձախողումից հետո, և որքան ժամանակ է պահանջվում դա անելու համար: Բեռը սովորաբար դանդաղ է բարձրանում, մինչև այն գերազանցի համակարգի հնարավորությունները:
Spike փորձարկում. Սա մի փոքր նման է սթրես-թեստավորմանը, բացառությամբ, որ ծանր բեռը հանկարծակի է կիրառվում, ի տարբերություն այն դանդաղորեն բարձրացնելու: Այս տեսակի թեստը ներկայացնում է, թե ինչ է տեղի ունենում, երբ ձեր օգտատերերի կամ այցելուների միջին թվի հանկարծակի աճ է տեղի ունենում, կամ երբ ձեր համակարգի վրա DDOS հարձակում է տեղի ունենում:
Ներծծման փորձարկում. Այս թեստը տարբերվում է վերը նշված մյուսներից: Այն դնում է ձեր համակարգը 80% (կամ մոտ) նորմալ բեռի տակ և թողնում է այն երկար ժամանակ աշխատել, ասենք 12-ից 14 ժամ: Այս տեսակի թեստը որոշում է, թե որքանով է հուսալի համակարգը ժամանակի ընթացքում:
Ձեր API-ների փորձարկումը Locust-ով
Կառուցապատողներին հասանելի են մի շարք տարբերակներ՝ իրենց API-ների բեռնման փորձարկման համար: Բեռի փորձարկման որոշ սովորական գործիքներ են Gatling, JMeter և Locust: Այս հոդվածում մենք կկենտրոնանանք Locust-ի վրա:
Locust-ը python-ի վրա հիմնված բաց կոդով բեռնվածության փորձարկման գործիք է, որն օգտագործվում է առաջատար ընկերությունների կողմից, ինչպիսիք են Google-ը, Microsoft-ը և Riot Games-ը՝ իրենց API-ները փորձարկելու համար: Այս հոդվածում մենք ցույց կտանք, թե ինչպես կարելի է բեռնել API-ի փորձարկումը:
Այս ձեռնարկի համար ես կստեղծեմ պարզ API Flask-ով: Դուք կարող եք հետևել ինձ հետ կամ պարզապես ստեղծել ձեր API-ն Node-ի միջոցով կամ ցանկացած շրջանակի հետ, որը ձեզ հարմար է:
Պահանջներ
Python 3
Կարգավորում և տեղադրում
Նախ, դուք պետք է ստեղծեք վիրտուալ միջավայր ձեր համակարգչի վրա, որպեսզի չխաթարեք ձեր գլոբալ Python միջավայրը: Դա անելու համար գործարկեք հետևյալ հրամանները. Նկատի ունեցեք, որ այս հրամանները կիրառվում են Windows տերմինալի վրա:
$ mkdir նախագիծ
$ cd /d ուղի\դեպի\նախագիծ
$ python -m venv venv
$ venv\Scripts\activate
Նախ, մենք ստեղծեցինք ա նախագիծ գրացուցակ. Այնուհետև մենք փոխեցինք մեր ընթացիկ գրացուցակը նախագիծ. Այնուհետև մենք ստեղծեցինք և ակտիվացրինք Python-ի համար վիրտուալ միջավայր այդ գրացուցակի ներսում:
Այժմ մենք կանցնենք տեղադրմանը տափաշիշ(մենք կօգտագործենք այն, որպեսզի ստեղծենք բեռնման փորձարկվող վերջնակետերը) և մորեխ ինքն իրեն.
Flask-ը տեղադրելու համար գործարկեք: Համոզվեք, որ դուք գտնվում եք նախագիծ որտեղ դուք ստեղծել եք վիրտուալ միջավայր:
$ pip տեղադրման տուփ
Locust-ը տեղադրելու համար գործարկեք
$ pip տեղադրել մորեխ
Երբ դա արվի, մուտքագրեք հետևյալ հրամանները. Համոզվեք, որ դուք ձեր մեջ եք նախագիծ գրացուցակը, երբ դա անում եք:
$ copy nul __init__.py
$ mkdir հավելված
$ copy nul app\app.py
$ copy nul հավելված\__init__.py
Այս հրամանները ստեղծում են որոշ ֆայլեր, որոնք մենք կօգտագործենք մեր վերջնական կետերը Flask-ի միջոցով ստեղծելու համար: Ի դեպ, դուք կարող եք նաև ստեղծել այս ֆայլերը՝ օգտագործելով ձեր ֆայլերի հետախույզը: Բայց ի՞նչ զվարճանք կա դրանում: Դա անելուց հետո պատճենեք ստորև նշված կոդը App.py
flask import-ից Flask, jsonify, խնդրանք
հավելված = Կոլբ (__name__)
մեքենայի_մոդելներ = [
{ 'ապրանքանիշը': 'Tesla', 'model': 'Model S' }
]
ինքնաթիռի_մոդելներ = [
{ 'ապրանքանիշը': 'Boeing', 'մոդել': '747' }
]
@app.route ('/cars')
def get_cars():
վերադարձնել jsonify (car_models)
@app.route ('/planes')
def get_planes():
վերադարձնել jsonify (plane_models)
եթե __անուն__ == '__հիմնական__':
app.run (debug=True)
Վերոնշյալ կոդը պարունակում է մեթոդ get_cars օգտագործվում է մեքենաների ապրանքանիշերի և դրանց մոդելների ցուցակը ստանալու համար, և get_planes օգտագործվում էր ինքնաթիռների ապրանքանիշերի և դրանց մոդելների ցուցակը ստանալու համար: Որպեսզի բեռնենք այս վերջնակետի թեստը, մենք պետք է գործարկենք app.py-ը: Դա անելու համար գործարկեք ստորև նշված հրամանը:
$ python ուղի\դեպի\app.py
Այն գործարկելուց հետո դուք պետք է տեսնեք նման բան.
Եթե դուք պատճենեք URL-ը տերմինալից և մուտքագրեք ավտոմեքենա or ինքնաթիռները /-ից հետո դուք պետք է կարողանաք այնտեղ տեսնել տվյալները: Այնուամենայնիվ, մեր նպատակն է ստուգել վերջնակետը մորեխով, ոչ թե բրաուզերով: Այսպիսով, եկեք դա անենք: Գործարկեք հետևյալ հրամանը ձեր արմատի մեջ նախագիծ Հայաստան.
$ copy nul locust_test.py
Սա ստեղծում է «locust_test.py» ֆայլ ձեր ֆայլի արմատում նախագիծ գրացուցակ. Դա անելուց հետո բացեք ֆայլը և տեղադրեք ստորև նշված կոդը: Շուտով կբացատրենք։
ներմուծման ժամանակ
մորեխի ներմուծումից HttpUser, առաջադրանք, միջեւ
դասի User Behaviour (HttpUser):
սպասման_ժամանակ = միջեւ (5, 10)
@առաջադրանք
def get_cars(self):
self.client.get('/cars')
@առաջադրանք
def get_planes(self):
self.client.get('/planes')
Սա Locust-ի օգտագործման հիմնական օրինակն է՝ API-ի փորձարկումը բեռնելու համար: Նախ, մենք ստեղծում ենք դաս Օգտագործողի վարքագիծ, որը կարող է տրվել ցանկացած համապատասխան անուն, բայց պետք է երկարաձգվի HttpUser. HttpUser Դա այն դասն է, որը հոգ է տանում մի քանի վիրտուալ օգտատերերի օրինակելիության մասին, որպեսզի կատարեն մեր կողմից նշված առաջադրանքները Օգտագործողի վարքագիծ խավ.
Առաջադրանքը սահմանվում է՝ ձևավորելով մեթոդը @առաջադրանք դեկորատոր. Մենք ունենք նաև ֆունկցիա, որը կոչվում է միջեւ () որը թույլ է տալիս մեզ նշել մի քանի վայրկյան, որին սպասելու ենք մինչև հաջորդ առաջադրանքը կատարելը: Դուք կարող եք տեսնել, որ մենք դրա համար հատկացրել ենք 5-ից 10 վայրկյան տիրույթ մեր կոդում:
Կոդը գործարկելու համար համոզվեք, որ դուք դեռ գտնվում եք ձեր վիրտուալ միջավայրում: Եթե ձեր ստեղծածը օգտագործվում է API-ին սպասարկող սերվերի կողմից, բացեք նոր տերմինալ, փոխեք ձեր գրացուցակը ձեր նախագիծ գրացուցակում և ակտիվացրեք ձեր ստեղծած վիրտուալ միջավայրը: Վիրտուալ միջավայրի ակտիվացման հրամանը կարող եք գտնել վերևում։ Այժմ մուտքագրեք ստորև նշված հրամանը ձեր տերմինալում:
$ մորեխ -f locust_test.py
Դուք պետք է տեսնեք նման բան:
Լռելյայնորեն, մորեխի վեբ ինտերֆեյսը գտնվում է http://localhost/8089 հասցեում: Եթե այցելում եք կայք, դուք պետք է տեսնեք այսպիսի ինտերֆեյս.
Ինտերֆեյսից մենք կարող ենք նշել օգտատերերի քանակը, սերմնահեղուկի արագությունը (վայրկյանում ստեղծված օգտատերերը) և Հյուրընկալիչը: Դուք կարող եք ստանալ ձեր հոսթի հասցեն՝ ստուգելով տերմինալը, որտեղ աշխատում է սերվերը: Մեր դեպքում այն գտնվում է 5000 նավահանգստում: Երբ սեղմում եք Սկսիր ողողել, ձեզ կներկայացվի ստորև ներկայացված ինտերֆեյսը:
Սա ձեզ ցույց է տալիս տարբեր օգտակար չափումներ, ինչպիսիք են ձախողված հարցումների քանակը, հարցման միջին ժամանակը, հարցման նվազագույն ժամանակը, հարցումները մեկ վայրկյանում և այլն: Երբ դուք գոհ եք ձեր տեսածից, կարող եք սեղմել կանգառի կոճակը:
Բացի այդ, Վիճակագրություններ էջանիշ, կա ա Դիագրամներ ներդիր, որը ցույց է տալիս ավելին տեղեկություն գրաֆիկի տեսքով, ինչպես ստորև ներկայացված պատկերը:
Կա ընդհանուր հարցումները մեկ վայրկյանում գրաֆիկի համար, արձագանքման ժամանակի գրաֆիկ, և օգտագործողների թվի գրաֆիկ, բոլորը դավադրություն են արել ժամանակի դեմ։ Օգտագործելով գրաֆիկները՝ դուք կարող եք որոշել, թե քանի օգտատեր է ընդունելի ֆիքսված արձագանքման ժամանակի համար, կամ կարող եք դիտարկել ձեր գծապատկերները պատասխանի մշտական ժամանակի համար՝ չնայած օգտատերերի աճող թվին և նման այլ պատկերացումներին: Եթե ցանկանում եք կիսվել դրանք stats մեկ ուրիշի հետ կարող եք ներբեռնել զեկույցը Ներբեռնեք տվյալները էջանիշը.
Եզրակացնել, ամփոփել...
Ձեր API-ի բեռնման փորձարկումը կարևորագույն գործունեություն է ձեր զարգացման գործընթացում, այնպես որ համոզվեք, որ այն ներառված է ձեր դիզայնի ցիկլում: Ի դեպ, դուք կարող եք նաև իրականացնել բեռնվածության փորձարկման այլ տեսակներ՝ փոփոխելով օգտագործողների քանակի և ձվադրման արագության արժեքները:
Եթե ցանկանում եք կատարել հասկի թեստ, նշեք մեծ արժեք (ասենք 2000) օգտագործողների թվի համար, իսկ հետո նույնքան մեծ արժեք ձեր ձվադրման արագության համար (օրինակ՝ 500): Սա նշանակում է, որ 4 վայրկյանում դուք կունենաք բոլոր 2000 օգտվողները ստեղծելու և մուտք գործելու ձեր վերջնական կետերը: Սթրես-թեստը նման կլինի, բայց ձվադրման արագության համար շատ ավելի ցածր արժեքով: Պարզելու համար այն ամենը, ինչ կարող եք անել, ստուգեք Locust-ը փաստաթղթեր.