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.

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

 

Първо създадохме a проект указател. След това променихме текущата ни директория на проект. След това създадохме и активирахме виртуална среда за Python в тази директория. 

Сега ще преминем към инсталирането Колба(ще го използваме, за да създадем крайните точки, които да бъдат тествани при натоварване) и скакалец себе си. 

 

За да инсталирате Flask, стартирайте. Уверете се, че сте в проект където сте създали виртуална среда.

$ pip колба за инсталиране

 

За да инсталирате Locust, стартирайте

$ pip инсталирайте скакалец

 

След като това стане, въведете следните команди. Уверете се, че сте във вашия проект директория, когато правите това.

$ copy nul __init__.py

$ mkdir приложение

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Тези команди създават някои файлове, които ще използваме за създаване на нашите крайни точки с помощта на Flask. Между другото, можете също да създадете тези файлове с помощта на вашия файлов мениджър. Но какво е забавното в това? След като направите това, копирайте кода по-долу в app.py

от колба импортиране Колба, jsonify, заявка

приложение = колба (__име__)

автомобили_модели = [

  { 'марка': 'Тесла', 'модел': 'Модел S' }

]

 

самолетни_модели = [

  { 'марка': 'Боинг', 'модел': '747' }

]

 

@app.route('/автомобили')

def get_cars():

  връщане на jsonify (модели на автомобили)

@app.route('/самолети')

def get_planes():

  връщане на jsonify(plane_models)

ако __name__ == '__ main__':

    app.run(debug=True)  

 

Горният код съдържа метод get_cars използвани за получаване на списък с марки автомобили и техните модели, и get_planes използва се за получаване на списък с марки самолети и техните модели. За да заредим теста на тази крайна точка, трябва да стартираме app.py. За да направите това, изпълнете командата по-долу.

$ python път\към\app.py

След като стартирате това, трябва да видите нещо подобно:

API тестване на натоварване 1

Ако копирате URL адреса от терминала и въведете автомобили or самолети след /, трябва да можете да видите данните там. Нашата цел обаче е да тестваме крайната точка с locust, а не с браузъра. Така че нека го направим. Изпълнете следната команда в корена на вашия проект директория.

 

$ copy nul locust_test.py

 

Това създава файл „locust_test.py“ в корена на вашия проект указател. След като направите това, отворете файла и поставете кода по-долу. Ще го обясним скоро.

 

време за импортиране

от locust import HttpUser, задача, между

 

клас UserBehaviour(HttpUser):

    време_на_чакане = между (5, 10)

 

    @задача

    def get_cars(self):

        self.client.get('/автомобили')

    

    @задача

    def get_planes(self):

        self.client.get('/самолети')

 

Това е основен пример за използване на Locust за зареждане на тест на API. Първо създаваме клас UserBehaviour, на който може да се даде всяко подходящо име, но трябва да се разширява HttpUser. HttpUser е класът, който се грижи за създаването на множество виртуални потребители за изпълнение на задачите, които сме посочили в UserBehaviour клас. 

Задачата се определя чрез украсяване на метод с @задача декоратор. Имаме и функция, наречена между() което ни позволява да посочим диапазон от секунди, които да изчакаме, преди да изпълним следващата задача. Можете да видите, че сме задали диапазон от 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 документация

Как да подправите MAC адрес

MAC адреси и MAC спуфинг: Изчерпателно ръководство

MAC адрес и MAC Spoofing: Изчерпателно ръководство Въведение От улесняване на комуникацията до активиране на сигурни връзки, MAC адресите играят основна роля при идентифицирането на устройства

Прочети повече »