Тэставанне нагрузкі API з дапамогай Locust

Тэставанне нагрузкі API з дапамогай Locust

Тэставанне нагрузкі API з дапамогай Locust: увядзенне

Напэўна, вы былі ў такой сітуацыі раней: вы пішаце код, які нешта робіць, напрыклад, канечную кропку. Вы правяраеце сваю канечную кропку з дапамогай Postman або Insomnia, і ўсё працуе нармальна. Вы перадаеце канчатковую кропку кліенцкаму распрацоўшчыку, які затым выкарыстоўвае API і разгортвае прыкладанне. Але потым, API не працуе, калі карыстальнікі выкарыстоўваюць прыкладанне.

Гэта можа быць вельмі раздражняльнай сітуацыяй, не кажучы ўжо пра тое, што гэта дорага для бізнесу. Вось чаму распрацоўшчыкі праграмнага забеспячэння праводзяць розныя тэсты праграмных сістэм, каб пераканацца, што яны працуюць належным чынам. API не адрозніваюцца. Перад разгортваннем вы павінны правесці як мінімум тэсты прадукцыйнасці і бяспекі.

Тэсты прадукцыйнасці можна згрупаваць у тэсты функцыянальнасці і тэсты нагрузкі. Праверкі функцыянальнасці - гэта тое, для чаго вы звычайна выкарыстоўваеце Postman або Insomnia. Яны гарантуюць, што ваш API працуе так, як вы чакаеце. Нагрузачныя тэсты, з іншага боку, больш занепакоеныя тым, як працуе ваш API пры рэальным выкарыстанні і пікавай нагрузцы, і менавіта пра гэта гэты артыкул. Разгледзім нагрузачныя тэсты больш падрабязна.

Што такое нагрузачнае тэставанне API?

Тэставанне нагрузкі API - гэта тып тэставання, які распрацоўшчыкі выкарыстоўваюць для мадэлявання звычайнай і пікавай нагрузкі на канчатковыя кропкі. Такое тэсціраванне дазваляе распрацоўшчыкам ацаніць прадукцыйнасць API у рэальным свеце перад яго разгортваннем. Гэта дапамагае ім вызначыць максімальную аператыўную магутнасць сістэмы, вузкія месцы, калі такія маюцца, і зніжэнне прадукцыйнасці. Нагрузачныя тэсты API звычайна выконваюцца шляхам стварэння віртуальных карыстальнікаў і іх выкарыстання для адначасовай праверкі функцыянальнасці API. 

Нагрузачныя тэсты API вымяраюць такія паказчыкі, як час водгуку, адначасовыя карыстальнікі, хуткасць прапускной здольнасці, узровень выкарыстання рэсурсаў, сярэдні час паміж адмовамі (MTBF), сярэдні час да адмовы (MTTF) і гэтак далей. Усе гэтыя паказчыкі можна выкарыстоўваць, каб вызначыць, наколькі добра працуе API.

Тыпы нагрузачнага тэставання

Існуе некалькі тыпаў нагрузачнага тэставання, кожны з якіх мае свае варыянты выкарыстання. Давайце паглядзім на некаторыя з іх.

Тэставанне нагрузкі: Гэта асноўная форма нагрузачнага тэсту. Ён выкарыстоўваецца для ацэнкі прадукцыйнасці сістэмы (у дадзеным выпадку API) пры нармальнай нагрузцы і чаканай пікавай нагрузцы.

Стрэс-тэставанне: Гэта выкарыстоўваецца для ацэнкі прадукцыйнасці сістэмы пры вельмі вялікай нагрузцы. Мэта гэтага тэсту - даведацца, ці аднаўляецца сістэма пасля збою і колькі часу патрабуецца для гэтага. Нагрузка звычайна павялічваецца павольна, пакуль не перавышае магчымасці сістэмы.

Спайк Тэставанне: Гэта крыху падобна на стрэс-тэставанне, за выключэннем таго, што вялікая нагрузка прыкладаецца раптоўна, а не павольна нарастае. Гэты від тэсту паказвае, што адбываецца, калі раптоўна павялічваецца сярэдняя колькасць карыстальнікаў або наведвальнікаў, або калі на вашу сістэму адбываецца DDOS-атака.

Выпрабаванне на замочванне: Гэты тэст не падобны на іншыя вышэй. Гэта ставіць вашу сістэму пад 80% (ці каля таго) нармальнай нагрузкі і пакідае яе працаваць на працягу доўгага перыяду, скажам, ад 12 да 14 гадзін. Такі тэст вызначае, наколькі надзейная сістэма з цягам часу.

Нагрузачнае тэсціраванне вашых API з дапамогай Locust

Распрацоўшчыкі маюць доступ да мноства варыянтаў нагрузачнага тэставання сваіх API. Некаторыя распаўсюджаныя інструменты нагрузачнага тэсціравання - Gatling, JMeter і 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 ўсталяваць саранчу

 

Як толькі гэта будзе зроблена, увядзіце наступныя каманды. Пераканайцеся, што вы ў сваім праект каталог, калі вы гэта зробіце.

$ копія нуль __init__.py

Прыкладанне $ mkdir

$ капіяваць нуль app\app.py

$ copy nul app\__init__.py

 

Гэтая каманда стварае некаторыя файлы, якія мы будзем выкарыстоўваць для стварэння канчатковых кропак з дапамогай Flask. Вы таксама можаце стварыць гэтыя файлы з дапамогай правадыра файлаў. Але што ў гэтым цікавага? Пасля таго, як вы гэта зробіце, скапіруйце прыведзены ніжэй код у app.py

з колбы імпартаваць Flask, jsonify, запыт

дадатак = Flask(__name__)

мадэлі_аўто = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

мадэлі_плоскасці = [

  { 'марка': 'Боінг', 'мадэль': '747' }

]

 

@app.route('/аўтамабілі')

дэф get_cars():

  вярнуць jsonify(car_models)

@app.route('/самалёты')

дэф get_planes():

  вярнуць jsonify(plane_models)

if __name__ == '__main__':

    app.run(адладка=Праўда)  

 

Прыведзены вышэй код змяшчае метад get_cars выкарыстоўваецца для атрымання спісу марак аўтамабіляў і іх мадэляў, а таксама get_planes выкарыстоўваецца для атрымання спісу марак самалётаў і іх мадэляў. Каб загрузіць тэст гэтай канчатковай кропкі, нам трэба запусціць app.py. Каб зрабіць гэта, выканайце наступную каманду.

$ python шлях\да\app.py

Пасля таго, як вы запусціце гэта, вы павінны ўбачыць нешта накшталт гэтага:

Нагрузачнае тэставанне API 1

Калі вы скапіруеце URL з тэрмінала і ўвядзіце аўтамабіляў or самалёты пасля /, вы павінны быць у стане ўбачыць дадзеныя там. Аднак наша мэта складаецца ў тым, каб праверыць канечную кропку з дапамогай locust, а не з дапамогай браўзера. Дык давайце зробім гэта. Выканайце наступную каманду ў корані вашага праект каталог.

 

$ капіяваць нуль locust_test.py

 

Гэта стварае файл 'locust_test.py' у корані вашага праект каталог. Пасля таго, як вы гэта зробіце, адкрыйце файл і ўстаўце код ніжэй. Мы растлумачым гэта ў бліжэйшы час.

 

час імпарту

з саранчы імпарт HttpUser, задача, паміж

 

клас UserBehaviour(HttpUser):

    час_чакання = паміж (5, 10)

 

    @task

    дэф get_cars(сам):

        self.client.get('/аўтамабілі')

    

    @task

    дэф get_planes(сама):

        self.client.get('/самалёты')

 

Гэта асноўны прыклад выкарыстання Locust для загрузачнага тэставання API. Спачатку мы ствараем клас Паводзіны карыстальніка, якому можна даць любую адпаведную назву, але яна павінна пашырацца HttpUser. HttpUser гэта клас, які клапоціцца аб стварэнні некалькіх віртуальных карыстальнікаў для выканання задач, якія мы вызначаем у Паводзіны карыстальніка класа. 

Задача вызначаецца шляхам упрыгожвання метаду @task дэкаратар. У нас таксама ёсць функцыя пад назвай паміж() што дазваляе нам вызначыць дыяпазон секунд, якія трэба чакаць перад выкананнем наступнай задачы. Вы можаце бачыць, што ў нашым кодзе мы прызначылі для гэтага дыяпазон ад 5 да 10 секунд. 

Каб запусціць код, пераканайцеся, што вы ўсё яшчэ знаходзіцеся ў сваім віртуальным асяроддзі. Калі той, які вы стварылі, выкарыстоўваецца серверам, які абслугоўвае API, адкрыйце новы тэрмінал, зменіце свой каталог на ваш праект і актывуйце створаную вамі віртуальную сераду. Вы можаце знайсці каманду для актывацыі віртуальнага асяроддзя вышэй. Цяпер увядзіце наступную каманду ў вашым тэрмінале.

 

$ locust -f locust_test.py

 

Вы павінны ўбачыць нешта накшталт гэтага:

Нагрузачнае тэставанне API 2

Па змаўчанні вэб-інтэрфейс locust знаходзіцца па адрасе http://localhost/8089. Калі вы наведваеце вэб-сайт, вы павінны ўбачыць такі інтэрфейс:

Нагрузачнае тэставанне API 3

З інтэрфейсу мы можам вызначыць колькасць карыстальнікаў, хуткасць адраджэння (карыстальнікаў, створаных у секунду), і хост. Вы можаце атрымаць адрас вашага хоста, праверыўшы тэрмінал, дзе працуе сервер. У нашым выпадку гэта порт 5000. Пры націску на Пачаць раіцца, вам будзе прадстаўлены інтэрфейс ніжэй.

Нагрузачнае тэставанне API 4

Гэта паказвае розныя карысныя паказчыкі, такія як колькасць няўдалых запытаў, сярэдні час для запыту, мінімальны час для запыту, колькасць запытаў у секунду і гэтак далей. Калі вы будзеце задаволены тым, што вы бачыце, вы можаце націснуць на кнопку прыпынку. 


Акрамя таго, статыстыка укладка, ёсць a Чарты ўкладка, якая паказвае больш інфармацыя у выглядзе графіка, як на малюнку ніжэй.

Існуе графік агульнай колькасці запытаў у секунду, графік часу водгуку, і графік колькасці карыстальнікаў, усё ў залежнасці ад часу. Выкарыстоўваючы графікі, вы можаце вызначыць, колькі карыстальнікаў прымальна для фіксаванага часу адказу, або вы можаце назіраць на сваіх дыяграмах для пастаяннага часу адказу, нягледзячы на ​​павелічэнне колькасці карыстальнікаў, і іншыя падобныя звесткі. Калі вы хочаце падзяліцца гэтым Статыстыка з кімсьці іншым, вы можаце спампаваць справаздачу з Спампаваць дадзеныя ўкладкі.

У заключэнне...

Нагрузачнае тэставанне вашага API з'яўляецца найважнейшай дзейнасцю ў вашым працэсе распрацоўкі, таму пераканайцеся, што яно ўключана ў ваш цыкл распрацоўкі. Дарэчы, вы таксама можаце праводзіць іншыя тыпы нагрузачных тэстаў, змяняючы значэнні колькасці карыстальнікаў і хуткасці з'яўлення. 

Калі вы жадаеце зрабіць тэст на ўсплёск, укажыце вялікае значэнне (скажам, 2000) для колькасці карыстальнікаў, а затым такое ж вялікае значэнне для хуткасці з'яўлення (напрыклад, 500). Гэта азначае, што за 4 секунды ў вас будуць створаны ўсе 2000 карыстальнікаў, якія атрымаюць доступ да вашых канчатковых кропак. Стрэс-тэст будзе аналагічным, але са значна меншым значэннем хуткасці спауна. Каб даведацца, што вы можаце зрабіць, праверце Locust дакументацыя