Բեռի փորձարկման հնարավորությունների մի փունջ միայն մեկ գործիքով

Իրերի փորձարկումը լի է հմայքով: Հատկապես, եթե մենք փորձարկում ենք մեր սեփական ստեղծագործությունը: Համենայն դեպս, ինչ-որ բան կոդավորելուց հետո մենք այն նախ ձեռքով փորձարկում ենք սովորական դեպքերի մի շարքով: Եթե ​​այն լավ է աշխատում, ապա մենք ներկայացնում ենք կոդը։

Բայց կա մի պահ, երբ մենք պետք է համոզվենք, որ մենք կատարել ենք հուսալի ստեղծագործություն։ Ենթադրենք, որ այն լավ է աշխատում որոշակի վիճակում, ինչպես, որ մենք այն ձեռքով փորձարկել ենք: Այնուամենայնիվ, ինչպե՞ս կարող ենք համոզվել, որ մեր ծածկագիրը նույն կերպ է վարվում ցանկացած այլ պայմաններում, ինչպես օրինակ, երբ այն ռմբակոծվում է բազմաթիվ հարցումներով: Այն փորձարկելու ավելի լավ միջոց պետք է լինի՝ առանց ձեր ընկերներին խնդրելու, որ օգնեն ձեզ ձեռքով (և զուգահեռաբար) հարցումներ կատարել ձեր դիմումին: Բարեբախտաբար, կա: Մենք կսովորենք, թե ինչպես բեռնել մեր հավելվածը k6-ի միջոցով մի քանի պայմաններում:

Տեղադրում

K6-ը տեղադրելու մի քանի եղանակ կա՝ կախված ձեր օպերացիոն համակարգից կամ համակարգի միջավայրից: Բայց այս հոդվածում ես կանդրադառնամ միայն դրանցից երկուսին, Linux/Ubuntu-ին և Docker-ին:

Ուղղակի մեջբերված k6 փաստաթղթերից: Դուք կարող եք տեղադրել k6-ը Linux Ubuntu-ում՝ գործարկելով այս հրամանը ձեր տերմինալում.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6

Docker-ի հետ ամեն ինչ մի փոքր ավելի հեշտ է դառնում: Դուք կարող եք տեղադրել այն՝ օգտագործելով այս հրամանը.

docker pull loadimpact/k6

Քանի որ Docker-ի օգտագործումը շատ ավելի հեշտ է դարձնում մեր կյանքը: Այս հոդվածում ես հաճախ կօգտագործեմ Docker-ը: Բայց էությունը դեռ նույնը կլիներ։ Ամբողջական բացատրությունը կարող եք գտնել այստեղ https://k6.io/docs/getting-started/installation/:

Հիմունքներ

Այս հոդվածի նպատակով ես կբեռնեմ իմ փորձնական նախագծերից մեկը: Բայց ես նաև կբացատրեմ API-ի մանրամասները, այնպես որ դուք դեռ կարող եք հետևել դրան:

Եթե ​​ցանկանում եք ճշգրիտ հետևել այս հոդվածին, կարող եք գտնել այն հավելվածը, որը կփորձարկվի այստեղ: Հավելվածն ինքնին պարզ ֆինանսական մենեջեր է, որտեղ կարող եք գրանցվել, մուտք գործել, ստեղծել եկամուտների կամ ծախսերի կատեգորիաներ և գրել ձեր եկամուտը կամ ծախսը: Դուք մանրամասն տեղեկություններ կստանաք, թե ինչպես կարգավորել սերվերը readme ֆայլում:

Եկեք սկսենք փորձարկել բազային URL-ը: Ենթադրենք, որ հիմնական URL-ը http://localhost:3000 է և վերադարձնում է «Բարի գալուստ API» հաղորդագրություն: Թեստի սցենարը կլինի.

Նախ, մենք ներմուծեցինք կախվածությունը վերևում: Նկատի ունեցեք, որ հետին պլանում k6-ը չի աշխատում NodeJS-ում, քանի որ ընդհանուր առմամբ JavaScript-ը հարմար չէ բարձր կատարողականության համար։ Այն գրված է Go-ում՝ ցանկալի բարձր արդյունավետության թեստավորման հասնելու համար:

Փորձարկումն ինքնին աշխատում է արտահանված լռելյայն ֆունկցիայի ներսում: Կոդի այս հատվածն այն է, ինչ մենք սովորաբար անվանում ենք VU Code: Այսպիսով, թեստն անցկացվում է մեկ անգամ և լռելյայն օգտագործում է միայն մեկ վիրտուալ օգտատեր (կարծեք սա որպես իրական օգտատեր, բայց մոդելավորված), բայց դուք կարող եք փոխել այն՝ օգտագործելով options-ը: Մենք կխոսենք VU օրենսգրքի և տարբերակների մասին ավելի ուշ:

Եթե ​​դուք բախվում եք ինչ-որ խնդրի, ինչպիսին է Docker-ն օգտագործելիս միացումը մերժվել է: Դուք պետք է փոխեք localhost-ը հոսթի IP հասցեին: Դուք կարող եք դա ստուգել՝ օգտագործելով docker inspect <container_id_or_name>-ը: Սովորաբար, հասցեի հոսթինգը ծառայության անվան իրական հասցեն է, երբ հղվում է: Կամ եթե դուք օգտագործում եք Linux համակարգ, կարող եք օգտագործել hostname -I: Դուք կստանաք 192.xxx.xxx.xx-ի նման մի բան: Այնուհետև localhost-ը փոխարինեք այդ IP հասցեով:

Այս թեստը կարող եք գործարկել՝ գործարկելով հրամանը.

// CLI
k6 run script.js
// Docker
docker run -i loadimpact/k6 run - <script.js

Դուք անմիջապես կտեսնեք թեստի արդյունքը տերմինալում: Սրա նման մի բան.

Տեսեք, որ եթե մենք տարբերակներ չենք տրամադրում այս թեստի համար, այն կաշխատի մեկ անգամ և օգտագործում է միայն մեկ վիրտուալ օգտվող: Ներքևում գտնվող մի շարք թվեր կան ներկառուցված չափումներ, ինչպիսիք են data_received, http_req_duration, http_req_failed, vus և այլն: Օրինակ՝ http_req_failed-ը ձախողված հարցումների ցուցանիշն է՝ ըստ setResponseCallback: Լռելյայնորեն 200-ից 399-ի կարգավիճակի կոդերով հարցումները համարվում են սպասված: Մենք կտեսնենք, թե ինչպես կատարել անհատական ​​չափումներ ավելի ուշ:

Կյանքի ցիկլ

Թեստի չորս փուլ կա. Առաջինը init է, այնուհետև setup, VU և teardown:

Ընդհանուր առմամբ, օրինաչափությունն այսպիսին է

init կոդը գործում է յուրաքանչյուր վիրտուալ օգտագործողի համար մեկ անգամ: Կարելի է մտածել, որ վիրտուալ օգտատերը նման է իրական օգտատիրոջը: Բայց դա սիմուլյացված է, և նրանք բոլորն անում են նույն բանը, նրանց վարքագիծը սահմանվում է լռելյայն ֆունկցիայի ներսում (VU Code): Դուք կարող եք ներմուծել մոդուլներ այստեղ՝ հետագայում օգտագործելու համար setup, VU կամ teardown ներսում:

setup-ը և teardown-ը գրեթե նույնն են, ինչ ցանկացած այլ փորձարկման գործիքում: Դրանք ձեզ պետք կգան, եթե ցանկանում եք ինչ-որ բան անել թեստի ավարտից առաջ և հետո: setup-ը կոչվում է init-ից հետո, բայց VU-ից առաջ, իսկ teardown_ը կանչվում է վերջին VU կրկնությունից հետո:

Այնուհետեւ մենք ունենք VU կոդը: Մենք այստեղ սահմանել ենք վիրտուալ օգտատիրոջ վարքագիծը. զանգահարելով API, ստուգելով, թե արդյոք ստացված պատասխանը ճիշտ է, արդյունքը պահելով չափման մեջ և այլն: Հիմնականում այս բաժինն այն է, որտեղ տեղի է ունենում իրական փորձարկումը: Այն աշխատում է ցիկլով յուրաքանչյուր վիրտուալ օգտագործողի համար սահմանված տևողության կամ փուլերի համար (Դուք կարող եք սա կարգավորել ընտրանքներում)

Իրական թեստեր

Այս բաժնում մենք կխոսենք իրական փորձարկման իրականացման տարբերակների, չափումների, շեմերի և կյանքի ցիկլի մասին:

Սկսեք տեղադրման գործառույթից:

Կարգավորման այս գործառույթում մենք գրանցում ենք մեր կեղծ օգտագործողին, այնուհետև մուտք ենք գործում մուտքի նշան ստանալու համար: Քանի որ բոլոր API-ները, որոնք մենք ցանկանում ենք ավելի ուշ փորձարկել, պաշտպանված են նույնականացման միջին ծրագրով:

Նախքան եկամուտների կամ ծախսերի պատմություն կազմելը, մենք պետք է ստեղծենք դրա կատեգորիաները, օրինակ՝ գնումներ, ներդրումներ, հարկեր և այլն:

Այն բանից հետո, երբ մենք ստանում ենք նշանը (ներառյալ id-ը և ցուցադրման էլեկտրոնային փոստը) և նոր ստեղծված եկամուտների/ծախսերի տեսակները, այնուհետև մենք կարող ենք վերադարձնել այս արժեքները: Այսպիսով, այն կարող է օգտագործվել ավելի ուշ՝ փորձարկվելիք API մուտք գործելու համար:

Նկատի ունեցեք, որ մենք պետք է խստացնենք ծանրաբեռնվածությունը և տրամադրենք պարամների բովանդակության տիպի JSON, հակառակ դեպքում լռելյայնորեն ուղարկվող տվյալները կլինեն ձևա-տվյալների ձևաչափով:

Հաջորդը քայքայման գործառույթն է:

Թուլացման գործառույթը համեմատաբար պարզ է: Այն, ինչ մենք անում ենք այստեղ, ներարկված աղյուսակի կրճատումն է, որպեսզի այն հետագայում օգտագործվի թեստավորման հաջորդ նիստի համար: Բայց տվյալների բազան մաքրելու համար մեզ անհրաժեշտ է մուտքի նշան: Բարեբախտաբար, մենք դա ունենք տվյալների օբյեկտի ներսում:

Այժմ ժամանակն է փորձարկել հիմնական API-ները:

Լավ, մենք նոր բան ունենք այստեղ: Ինչպես ասացի, մենք կանդրադառնանք ընտրանքներին և չափորոշիչներին: Նկատի ունեցեք, որ ես բաց թողեցի տեղադրման և անջատման գործառույթները, դրանք դեռ կան իրական թեստային սցենարի ֆայլում:

Նախ, մենք ունենք տարբերակներ.

  • vus. վիրտուալ օգտագործողների առավելագույն քանակը, որոնք պետք է մոդելավորվեն
  • duration՝ թեստի տևողությունը
  • thresholds՝ թեստի չափանիշներ

Մենք ասում ենք, որ թեստն անցնում է, եթե թեստի արդյունքը դեռ գտնվում է մեր սահմանված շեմերի սահմաններում։ Վերոնշյալ օրինակից, HTTP հարցումների բոլոր տևողությունները պետք է լինեն 2 վայրկյանից ցածր 75%-ով: Եթե ​​ոչ, ապա թեստը կդադարեցվի:

Ակնհայտ է, որ կան ավելի շատ տարբերակներ, որոնք կարող եք օգտագործել: Ամբողջական ցանկը կարող եք ստանալ այստեղ:

Հաջորդը՝ check ֆունկցիան: Նայելով 46-ից 49-րդ տողերին՝ կարո՞ղ եք գուշակել, թե ինչ է դա անում: Այո, դա որոշ պահանջներ ստուգելու մասին է: Եթե ​​վերադարձված պատասխանը հաջողված չէ, և HTTP զանգի տևողությունը 2 վայրկյանից բարձր է, ապա ստուգումները ձախողվելու են: Արդյունքը, որը դուք կստանաք, նման կլինի.

Տեսեք, որ 298 ստուգումները ձախողվել են, ինչը նշանակում է, որ HTTP հարցման տևողությունը 2 վայրկյանից ավելի է տևում:

Ինչպես գիտեք, թեստն ավարտելուց հետո մենք ստանում ենք արդյունքը։ Ինչպիսիք են http_req_duration, http_req_failed, http_req_waiting և այլն: Սրանք ներկառուցված չափումներ են, բայց դուք կարող եք նաև կատարել ձեր սեփական չափումները՝ օգտագործելով Trend և Rate (կան նաև Gauge և Counter):

6-րդ և 7-րդ տողերում մենք օրինակ ենք բերել չափումները և տվել նրանց անունները: Այնուհետև 52 և 56 տողերում մենք ավելացնում ենք HTTP հարցման տևողության արդյունքը Rate և Trend-ին: Բայց սպասե՛ք։ Որոնք են տոկոսադրույքը և միտումը:

Դրույքաչափը ավելացված արժեքների տոկոսն է, որոնք զրոյական չեն: Պատկերացրեք այնպես, ինչպես երբ գումարում եք զրո կամ մեկ թիվ: Եթե ​​կրկնում եք՝ ավելացնելով այս պատահական թիվը օղակի մեջ, ապա արդյունքը բաժանում եք օղակների թվի վրա: Ապա դուք ստանում եք տոկոսադրույքը:

Մինչդեռ Trend-ը նման է թեստի վիճակագրությանը։ Այն ձեզ տալիս է միջինը, նվազագույնը, առավելագույնը և տոկոսը:

Բեռնման փորձարկման տատանումներ

Այս բաժնում մենք կխոսենք ծանրաբեռնվածության թեստերի որոշ տատանումների մասին, դրանք են՝ բեռնվածության փորձարկումը, ծխի փորձարկումը, սթրեսի թեստը, ցցերի փորձարկումը և ներծծման փորձարկումը:

Բեռնման փորձարկում

Այն, ինչ մենք արել ենք մինչ այժմ, բեռնվածության փորձարկումն է: Որովհետև մենք ցանկանում ենք գնահատել մեր համակարգի աշխատանքը: Սովորաբար, մեզ անհրաժեշտ է բեռնվածության փորձարկում՝ որոշելու համար, թե մեր համակարգը ինչպես կվարվի երկու պայմաններում՝ նորմալ և առավելագույն երթևեկության պայմաններում: Նաև բավականին սովորական է շարունակաբար կատարել բեռնվածության փորձարկում՝ համոզվելու համար, որ մեր համակարգի կատարումը դեռևս ցանկալի արժեքի սահմաններում է:

Ընդհանրապես, դուք միայն պետք է փոխեք options-ը՝ բեռնվածության փորձարկման տատանումները կատարելու համար: Օրինակ, options-ը, որը ձեզ հարկավոր է, նման բան է.

stages-ի մասին մինչև հիմա չենք խոսել: stages-ը նման է նախատեսված տրաֆիկի: Օրինակ, 5 րոպեի ընթացքում կա ընդամենը 100 օգտվող: Այնուհետև հաջորդ 10 րոպեների ընթացքում այն ​​մնում է 100 օգտագործողների մեջ: Վերջապես, այն իջնում ​​է մինչև 0 օգտվող՝ վերականգնումը մոդելավորելու համար:

Ծխի փորձարկում

Թեստային սցենար գրելիս կլինեն առողջական վիճակի ստուգումներ: Արդյո՞ք թեստի սցենարն արդեն ճի՞շտ է: Արդյո՞ք նա անում է այն, ինչ մենք ուզում ենք:

Ակնհայտ է, որ դուք չեք ցանկանում սահմանել թեստի տևողությունը մեկ ժամ, երբ գրում եք ձեր թեստային սցենարը: Պարզապես ժամանակ է վատնում մեկ ժամ սպասելու համար, որպեսզի տեսնենք, թե արդյոք մենք ճիշտ թեստային սցենար ենք գրում:

Ահա թե ինչու, ընդհանուր առմամբ, options ծխի փորձարկման համար այսպիսին կլիներ

Դուք պետք է նվազագույնի հասցնեք օգտագործողների թիվը և տևողությունը:

Սթրեսի թեստավորում

Ենթադրենք, որ դուք աշխատում եք էլեկտրոնային առևտրի ընկերությունում և ցանկանում եք իմանալ, թե ինչպես է ձեր համակարգը վարվում մեծ վաճառքի թրաֆիկի պայմաններում: Այն, ինչ դուք պետք է անեք, ձեր համակարգի վրա սթրես-թեստավորումն է:

Սթրեսի թեստը ծանրաբեռնվածության փորձարկման տեսակ է, որն օգտագործվում է համակարգի սահմանները որոշելու համար: Այս թեստի նպատակն է ստուգել համակարգի կայունությունն ու հուսալիությունը ծայրահեղ պայմաններում:

Երբ դուք սթրես-թեստավորում եք անում, դուք դուրս կգաք ձեր սովորական տրաֆիկից: Այսպիսով, անշուշտ ռիսկային է սթրես-թեստավորում կատարել արտադրական միջավայրում: Լավ է այն փորձարկել ձեր տեղական մեքենայի կամ բեմադրության միջավայրում:

Spike Testing

Spike-ի թեստը նման է սթրես-թեստավորմանը, մենք ցանկանում ենք փորձարկել մեր համակարգը ծայրահեղ պայմաններում: Տարբերությունը կայանում է նրանում, որ սթրես-թեստավորումն անցնում է ավելի երկար փուլերով՝ թիրախը բարձրացնելու համար, հասկի թեստը պարզապես անցնում է մինչև ծայրահեղ վիճակ: Երթևեկության հանկարծակի աճի մոդելավորում:

Ներծծում փորձարկում

Soak-ի փորձարկումը երկարաժամկետ ժամանակահատվածում գնահատում է համակարգի հուսալիությունը: Ներծծման թեստը բացահայտում է աշխատանքի և հուսալիության խնդիրները, որոնք բխում են համակարգի երկար ժամանակ ճնշման տակ գտնվելուց:

Հուսալիության խնդիրները սովորաբար կապված են վրիպակների, հիշողության արտահոսքի, պահեստավորման անբավարար քվոտաների, սխալ կազմաձևման կամ ենթակառուցվածքի խափանումների հետ: Արդյունավետության խնդիրները սովորաբար կապված են տվյալների բազայի սխալ կարգավորման, հիշողության արտահոսքի, ռեսուրսների արտահոսքի կամ մեծ քանակությամբ տվյալների հետ:

Եզրակացություն

K6-ում ավելին կա, քան մենք խոսել ենք այս հոդվածում: Կան շատ տարբերակներ, որոնք կարող եք օգտագործել, սցենարներ, եթե Ձեզ անհրաժեշտ է առաջադեմ օգտատիրոջ վարքագիծ, թեստի արդյունքը պահել CSV կամ JSON ֆայլում, ունենալ ցուցատախտակ՝ ներկայացման համար և այլն:

Ես կասեի, որ k6 փաստաթղթերը հեշտ է նավարկելու և հասկանալի: Մեզ համար ամեն ինչ կոկիկ գրված է։ Այսպիսով, մի հապաղեք ուղղակիորեն կարդալ պաշտոնական փաստաթղթերը:

Ի վերջո, ես միշտ խոսել եմ այս մասին, երբ խոսում էի ներկայացման մասին: Մենք չպետք է կատարողականի ճշգրտումներ կատարենք նախքան ծածկագրի ամբողջական գործարկումը: Նախ համոզվեք, որ կոդը մաքուր է և պահպանելի, այնուհետև ժամանակն է շտկելու և ավելի լավ լուծումներ գտնելու արդյունավետությունը բարելավելու համար: Հակառակ դեպքում, ինչպես ասաց Դոնալդ Կնուտը, մենք կհայտնվենք վաղաժամ օպտիմալացման թակարդում:

Ամբողջական թեստային սցենարը կարող եք ունենալ այստեղ՝ https://github.com/agusrichard/javascript-workbook/tree/master/k6-article-material

Շնորհակալություն ընթերցանության և ուրախ փորձարկման համար:

Իմացեք ավելին բեռի փորձարկման մասին



Ռեսուրսներ