API-ի բեռնման փորձարկում Locust-ով

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

Այն գործարկելուց հետո դուք պետք է տեսնեք նման բան.

API-ի բեռնման փորձարկում 1

Եթե ​​դուք պատճենեք 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

 

Դուք պետք է տեսնեք նման բան:

API-ի բեռնման փորձարկում 2

Լռելյայնորեն, մորեխի վեբ ինտերֆեյսը գտնվում է http://localhost/8089 հասցեում: Եթե ​​այցելում եք կայք, դուք պետք է տեսնեք այսպիսի ինտերֆեյս.

API-ի բեռնման փորձարկում 3

Ինտերֆեյսից մենք կարող ենք նշել օգտատերերի քանակը, սերմնահեղուկի արագությունը (վայրկյանում ստեղծված օգտատերերը) և Հյուրընկալիչը: Դուք կարող եք ստանալ ձեր հոսթի հասցեն՝ ստուգելով տերմինալը, որտեղ աշխատում է սերվերը: Մեր դեպքում այն ​​գտնվում է 5000 նավահանգստում: Երբ սեղմում եք Սկսիր ողողել, ձեզ կներկայացվի ստորև ներկայացված ինտերֆեյսը:

API-ի բեռնման փորձարկում 4

Սա ձեզ ցույց է տալիս տարբեր օգտակար չափումներ, ինչպիսիք են ձախողված հարցումների քանակը, հարցման միջին ժամանակը, հարցման նվազագույն ժամանակը, հարցումները մեկ վայրկյանում և այլն: Երբ դուք գոհ եք ձեր տեսածից, կարող եք սեղմել կանգառի կոճակը: 


Բացի այդ, Վիճակագրություններ էջանիշ, կա ա Դիագրամներ ներդիր, որը ցույց է տալիս ավելին տեղեկություն գրաֆիկի տեսքով, ինչպես ստորև ներկայացված պատկերը:

Կա ընդհանուր հարցումները մեկ վայրկյանում գրաֆիկի համար, արձագանքման ժամանակի գրաֆիկ, և օգտագործողների թվի գրաֆիկ, բոլորը դավադրություն են արել ժամանակի դեմ։ Օգտագործելով գրաֆիկները՝ դուք կարող եք որոշել, թե քանի օգտատեր է ընդունելի ֆիքսված արձագանքման ժամանակի համար, կամ կարող եք դիտարկել ձեր գծապատկերները պատասխանի մշտական ​​ժամանակի համար՝ չնայած օգտատերերի աճող թվին և նման այլ պատկերացումներին: Եթե ​​ցանկանում եք կիսվել դրանք stats մեկ ուրիշի հետ կարող եք ներբեռնել զեկույցը Ներբեռնեք տվյալները էջանիշը.

Եզրակացնել, ամփոփել...

Ձեր API-ի բեռնման փորձարկումը կարևորագույն գործունեություն է ձեր զարգացման գործընթացում, այնպես որ համոզվեք, որ այն ներառված է ձեր դիզայնի ցիկլում: Ի դեպ, դուք կարող եք նաև իրականացնել բեռնվածության փորձարկման այլ տեսակներ՝ փոփոխելով օգտագործողների քանակի և ձվադրման արագության արժեքները: 

Եթե ​​ցանկանում եք կատարել հասկի թեստ, նշեք մեծ արժեք (ասենք 2000) օգտագործողների թվի համար, իսկ հետո նույնքան մեծ արժեք ձեր ձվադրման արագության համար (օրինակ՝ 500): Սա նշանակում է, որ 4 վայրկյանում դուք կունենաք բոլոր 2000 օգտվողները ստեղծելու և մուտք գործելու ձեր վերջնական կետերը: Սթրես-թեստը նման կլինի, բայց ձվադրման արագության համար շատ ավելի ցածր արժեքով: Պարզելու համար այն ամենը, ինչ կարող եք անել, ստուգեք Locust-ը փաստաթղթեր

Շրջանցելով TOR գրաքննությունը

Շրջանցելով ինտերնետ գրաքննությունը TOR-ով

Շրջանցելով ինտերնետ գրաքննությունը TOR-ի միջոցով Ներածություն Մի աշխարհում, որտեղ տեղեկատվության հասանելիությունն ավելի ու ավելի է կարգավորվում, Tor ցանցի նման գործիքները վճռորոշ են դարձել

Կարդալ ավելին "