Урок за тестване на производителността
⚡ Умно обобщение
Тестването на производителността е процес на тестване на софтуер, който оценява скоростта на приложението, времето за реакция, стабилността, мащабируемостта и използването на ресурси при специфични натоварвания. То идентифицира и елиминира пречките преди внедряването, като гарантира надеждност в реални условия.

Какво е тестване на ефективността?
Тестване на производителността е процес на тестване на софтуер, използван за тестване на скоростта, времето за реакция, стабилността, надеждността, скалируемостта и използването на ресурси на софтуерно приложение при конкретно натоварване. Основната цел на тестването на производителността е да идентифицира и елиминира тесните места в производителността на софтуерното приложение. Това е подмножество от инженеринг на производителността и е известно също като „Тестване на производителност“.
Фокусът на тестването на производителността е проверката на:
- Скорост – Определя дали приложението реагира бързо
- скалируемост – Определя максималното потребителско натоварване, което софтуерното приложение може да обработи
- Стабилност – Определя дали приложението е стабилно при различни натоварвания
PFLB се фокусира върху прецизно тестване на производителността, което помага на системите да останат стабилни при непредсказуеми натоварвания. Услугите ѝ обхващат тестване на натоварване, пиково тестване и измерване на латентност, със силен фокус върху идентифицирането на влошаване на производителността, преди то да засегне крайните потребители.
Защо тестването на ефективността е важно?
Функционалността и функционалността, поддържани от софтуерната система, не са единственият проблем. Производителността на софтуерното приложение, като времето за реакция, надеждността, използването на ресурси и мащабируемостта, са от значение. Целта на тестването на производителността не е да се открият грешки, а да се елиминират пречките в производителността.
Тестването на производителността се извършва, за да се предостави на заинтересованите страни информация за тяхното приложение по отношение на скоростта, стабилността и мащабируемостта. По-важното е, че тестването на производителността разкрива какво трябва да се подобри, преди продуктът да бъде пуснат на пазара. Без тестване на производителността е вероятно софтуерът да страда от проблеми като бавна работа, докато няколко потребители го използват едновременно, несъответствия между различните операционни системи и лоша използваемост.
Тестването на производителността определя дали софтуерът отговаря на изискванията за скорост, мащабируемост и стабилност при очаквани натоварвания. Приложенията, пуснати на пазара с лоши показатели за производителност поради липса на или лошо тестване на производителността, вероятно ще си спечелят лоша репутация и няма да постигнат очакваните цели за продажби.
Така че, критични за мисията приложения като програми за изстрелване в космоса или животоспасяващо медицинско оборудване трябва да бъдат тествани за ефективност, за да се гарантира, че работят за дълъг период без отклонения.
Според Dunn & Bradstreet, 59% от компаниите от Fortune 500 изпитват приблизително 1.6 часа престой всяка седмица. Като се има предвид, че средната компания от Fortune 500 с минимум 10,000 56 служители плаща 896,000 долара на час, частта от разходите за труд за престой за такава организация ще бъде 46 XNUMX долара седмично, което означава повече от XNUMX милиона долара годишно.
Само a 5 минути престой of GoogleОчаква се .com (19 август 13 г.) да струва на търсачката толкова, колкото $ 545,000.
Смята се, че компаниите са загубили продажби на стойност $ 1100 в секунда поради скорошен Amazon Прекъсване на уеб услугата.
Следователно тестването на ефективността е важно. За да ви помогнем с този процес, вижте този списък с инструменти за тестване на ефективността.
Видове тестване на ефективността
Има основно шест типа тестване на производителността в софтуерното тестване, които са обяснени по-долу.
- Тестване на натоварването – проверява способността на приложението да работи при очаквани потребителски натоварвания. Целта е да се идентифицират тесните места в производителността, преди софтуерното приложение да започне да работи.
- Стрес тестове - включва тестване на приложение при екстремни натоварвания, за да видите как се справя с висок трафик или обработка на данни. Целта е да се идентифицира точката на прекъсване на приложението.
- Тест за издръжливост – Прави се, за да се гарантира, че софтуерът може да се справи с очакваното натоварване за дълъг период от време. Помага за откриване на проблеми като течове на памет и изчерпване на ресурсите, които се появяват само по време на продължителна работа.
- Спайк тестване – тества реакцията на софтуера на внезапни големи пикове в натоварването, генерирани от потребителите. За разлика от стрес тестовете, пиковите тестове се фокусират конкретно върху това как системата се справя и се възстановява от резки, краткотрайни пикове на трафика.
- Тестване на обем – включва попълване на база данни с голям обем данни и наблюдение на цялостното поведение на софтуерната система. Целта е да се провери производителността на софтуерното приложение при различни обеми на базата данни.
- Тестване за мащабируемост – определя ефективността на софтуерното приложение при „мащабиране“, за да поддържа увеличеното потребителско натоварване. Помага за планирането на добавянето на капацитет към вашата софтуерна система.
Често срещани проблеми с производителността
Повечето проблеми с производителността се въртят около скоростта, времето за реакция, времето за зареждане и лошата мащабируемост. Скоростта често е един от най-важните атрибути на приложението. Бавно работещото приложение ще загуби потенциални потребители. Тестването на производителността гарантира, че приложението работи достатъчно бързо, за да задържи вниманието и интереса на потребителя. Следните са често срещани проблеми с производителността, при които скоростта е повтарящ се фактор:
- Дълго време за зареждане – Времето за зареждане обикновено е първоначалното време, необходимо за стартиране на приложението. Това обикновено трябва да се сведе до минимум. Въпреки че някои приложения е невъзможно да се заредят за по-малко от минута, времето за зареждане трябва да се поддържа под няколко секунди, ако е възможно.
- Лошо време за реакция – Времето за реакция е времето, необходимо от момента, в който потребителят въведе данни в приложението, до момента, в който приложението изведе отговор на тези данни. Обикновено това трябва да е много бързо. Ако потребителят трябва да чака твърде дълго, той губи интерес.
- Лоша скалируемост – Един софтуерен продукт страда от лоша мащабируемост, когато не може да се справи с очаквания брой потребители или когато не побира достатъчно широк кръг от потребители. Тестване на товара трябва да се направи, за да сте сигурни, че приложението може да се справи с очаквания брой потребители.
- Тесни места – Пречките в системата са препятствия, които влошават цялостната производителност на системата. Пречките в системата са, когато грешки в кода или хардуерни проблеми причиняват намаляване на производителността при определени натоварвания. Често пречките в системата се причиняват от един дефектен участък от кода. Ключът към отстраняването на проблем с пречките е намирането на участъка от кода, който причинява забавянето, и опитът за отстраняването му там. Пречките в системата обикновено се отстраняват чрез коригиране на лошо работещи процеси или добавяне на допълнителен хардуер. Някои... често срещани тесни места в производителността са:
- Използване на процесора
- Използване на паметта
- Използване на мрежата
- Operating Системни ограничения
- Използване на диск
Как да направите тестване на производителността
Методологията, възприета за тестване на ефективността, може да варира в широки граници, но целта за тестовете на ефективността остава същата. Може да ви помогне да демонстрирате, че вашата софтуерна система отговаря на определени предварително определени критерии за ефективност. Или може да помогне за сравняване на производителността на две софтуерни системи. Може също така да помогне за идентифициране на части от вашата софтуерна система, които влошават нейната производителност.
По-долу е даден общ процес за извършване на тестване на производителността.

Стъпка 1) Идентифицирайте вашата тестова среда
Познавайте вашата физическа тестова среда, производствена среда и какви инструменти за тестване са налични. Разберете подробности за хардуерните, софтуерните и мрежовите конфигурации, използвани по време на тестването, преди да започнете процеса на тестване. Това ще помогне на тестерите да създават по-ефективни тестове. Също така ще помогне за идентифициране на евентуални предизвикателства, с които тестерите могат да се сблъскат по време на процедурите за тестване на производителността.
Стъпка 2) Определете критериите за приемане на ефективността
Това включва цели и ограничения за пропускателна способност, време за реакция и разпределение на ресурсите. Необходимо е също така да се определят критерии за успех на проекта извън тези цели и ограничения. Тестерите трябва да имат правомощия да задават критерии и цели за ефективност, тъй като често спецификациите на проекта не включват достатъчно голямо разнообразие от показатели за ефективност. Понякога може изобщо да няма такива. Когато е възможно, намирането на подобно приложение за сравнение е добър начин за определяне на цели за ефективност.
Стъпка 3) Тестове за изпълнение на план и дизайн
Определете как е вероятно потреблението да варира между крайните потребители и посочете ключови сценарии за тестване за всички възможни случаи на употреба. Необходимо е да се симулират различни крайни потребители, да се планират данни от тестове за производителност и да се очертаят какви показатели ще се събират.
Стъпка 4) Конфигуриране на тестовата среда
Подгответе тестовата среда преди изпълнение. Също така, подредете инструменти и други ресурси. Наподобете производствената среда възможно най-точно, за да гарантирате, че резултатите от тестовете са реалистични и приложими.
Стъпка 5) Внедрете тестов дизайн
Създайте тестовете за ефективност според вашия тестов дизайн.
Стъпка 6) Изпълнете тестовете
Изпълнете и наблюдавайте тестовете.
Стъпка 7) Анализ, настройка и повторно тестване
Консолидирайте, анализирайте и споделете резултатите от тестовете. След това направете фина настройка и тествайте отново, за да видите дали има подобрение или намаление на производителността. Тъй като подобренията обикновено намаляват с всяко повторно тестване, спрете, когато процесорът причини затруднения. Тогава може да се наложи да обмислите опцията за увеличаване на мощността на процесора.
Показатели за тестване на ефективността: Наблюдавани параметри
Основните параметри, наблюдавани по време на тестване на производителността, включват:
- Използване на процесора – времето, което процесорът прекарва в изпълнение на не-празни нишки.
- Използване на паметта – количеството физическа памет, достъпна за процеси на компютъра.
- Дисково време – времето, през което дискът е зает с изпълнение на заявка за четене или запис.
- Честотна лента - показва битовете в секунда, използвани от мрежов интерфейс.
- Частни байтове – броят байтове, които даден процес е разпределил и които не могат да бъдат споделяни между други процеси. Те се използват за измерване на течове на памет и използване.
- Обвързана памет – количеството използвана виртуална памет.
- Страници с памет/секунда – броят на страниците, записани на или прочетени от диска, за да се разрешат твърди грешки на страниците. Твърдите грешки на страниците възникват, когато код, който не е от текущия работен набор, се извиква от другаде и се извлича от диск.
- Грешки в страницата/секунда – общата скорост, с която процесорът обработва страниците с грешки. Това се случва, когато даден процес изисква код извън работния си набор.
- Прекъсвания на процесора за секунда – средният брой хардуерни прекъсвания, които процесорът получава и обработва всяка секунда.
- Дължина на опашката на диска – средният брой заявки за четене и запис, поставени на опашка за избрания диск по време на интервал от извадка.
- Дължина на опашката за мрежов изход – дължината на опашката от изходни пакети в пакети. Всичко повече от две означава забавяне и е необходимо да се спре запушването.
- Мрежови байтове общо за секунда – скоростта, с която байтовете се изпращат и получават по интерфейса, включително рамкиращите символи.
- Време за реакция - времето от момента, в който потребителят въведе заявка, до момента, в който бъде получен първият символ от отговора.
- Пропускателна способност – скоростта, с която компютър или мрежа получава заявки в секунда.
- Размер на обединяването на връзките – броя потребителски заявки, които са изпълнени от групирани връзки. Колкото повече заявки бъдат изпълнени от връзки в пула, толкова по-добра ще бъде производителността.
- Максимален брой активни сесии – максималния брой сесии, които могат да бъдат активни наведнъж.
- Коефициенти на попадение – това се отнася до броя на SQL изрази, които се обработват от кеширани данни вместо скъпи I/O операции. Това е добро място да започнете за решаване на проблеми със затруднения.
- Посещения в секунда – броят посещения на уеб сървъра по време на всяка секунда от теста за натоварване.
- Сегмент за връщане назад – количеството данни, което може да се върне назад във всеки един момент.
- Заключвания на бази данни – заключването на таблици и бази данни трябва да бъде наблюдавано и внимателно настроено.
- Топ чакания – наблюдава се, за да се определи кои времена на изчакване могат да бъдат намалени, когато се работи с това колко бързо се извличат данни от паметта.
- Броят на нишките – Състоянието на приложението може да се измери чрез броя на изпълняваните и активни в момента нишки.
- Събиране на боклук – включва връщане на неизползваната памет обратно в системата. Събирането на боклука трябва да се следи за ефективност.
Пример за тестови случаи за тестване на производителността
По-долу са дадени примерни тестови случаи за тестване на производителността:
- Тестов случай 01: Проверете дали времето за реакция не е повече от 4 секунди, когато 1000 потребители достъпват уебсайта едновременно.
- Тестов случай 02: Проверете дали времето за реакция на приложението под натоварване е в приемлив диапазон, когато мрежовата връзка е бавна.
- Тестов случай 03: Проверете максималния брой потребители, които приложението може да обработи, преди да се срине.
- Тестов случай 04: Проверете времето за изпълнение на базата данни, когато 500 записа се четат/записват едновременно.
- Тестов случай 05: Проверете използването на процесора и паметта на приложението и сървъра на базата данни при условия на пиково натоварване.
- Тестов случай 06: Проверете времето за реакция на приложението при условия на ниско, нормално, умерено и тежко натоварване.
По време на действителното изпълнение на теста за производителност неясни термини като приемлив обхват, голямо натоварване и т.н. се заменят с конкретни числа. Инженерите по производителността определят тези числа според бизнес изискванията и техническата среда на приложението.
Най-добри практики за тестване на производителността
Спазването на установените най-добри практики гарантира, че тестовете за производителност дават надеждни резултати. Тези насоки помагат на екипите да избегнат често срещани капани.
- Огледайте производствената среда – Конфигурирайте тестовата си конфигурация така, че да отразява максимално точно производствените условия. Разликите във версиите на хардуера или софтуера могат да доведат до подвеждащи резултати.
- Проектирайте реалистични тестови сценарии – Създавайте тестови случаи, които симулират действителното поведение на потребителите, включително време за обмисляне и едновременни транзакции.
- Използвайте показатели, базирани на процентили – Разчитайте на времената за реакция от 90-ия и 95-ия персентил, а не само на средните стойности. Персентилите разкриват латентността в края на процеса, която средните стойности могат да скрият.
- Тествайте рано и непрекъснато – Интегрирайте тестването на производителността в CI/CD конвейера, вместо да го третирате като дейност на последен етап.
- Документиране и изходни резултати – Записвайте резултатите от всяко тестово изпълнение. Сравняването на новите резултати с базовите нива улеснява откриването на регресии между изданията.
Как изкуственият интелект трансформира тестването на производителността
Изкуственият интелект е решаping тестване на производителността чрез автоматизиране на сложни аналитични задачи и активиране на възможности за прогнозиране. Инструментите, задвижвани от изкуствен интелект, анализират исторически данни, откриват модели и предоставят практически препоръки, без да се изисква човешка намеса на всяка стъпка.
- Предсказващо откриване на аномалии – Алгоритмите с изкуствен интелект анализират показателите за производителност в реално време по време на тестове за натоварване и сигнализират за отклонения, преди те да ескалират до критични повреди.
- Автоматизиран анализ на първопричините – Инструментите, задвижвани от изкуствен интелект, съпоставят данни между разпределени системи, за да определят точните компоненти, причиняващи влошаване на производителността.
- Интелигентна оптимизация на тестовете – Моделите за машинно обучение идентифицират излишни тестови сценарии и предлагат оптимални конфигурации, намалявайки времето за изпълнение, като същевременно запазват покритието.
- Самовъзстановяващи се тестови скриптове – Изкуственият интелект адаптира тестовите скриптове, когато интерфейсите на приложенията се променят, намалявайки разходите за поддръжка на пакетите за тестове за производителност.
Инструменти за тестване на ефективността
На пазара се предлага голямо разнообразие от инструменти за тестване на производителността. Изборът на инструмент за тестване ще зависи от много фактори, като например видовете поддържани протоколи, цената на лиценза, хардуерните изисквания и поддържаната платформа. По-долу е даден списък с популярно използвани инструменти за тестване.
- HP LoadRunner - е един от най-популярните инструменти за тестване на производителността на пазара. Този инструмент е способен да симулира стотици хиляди потребители, като подлага приложенията на реални натоварвания, за да определи поведението им при очаквани натоварвания. LoadRunner разполага с генератор на виртуални потребители, който симулира действията на живи човешки потребители.
- JMeter - един от водещите инструменти с отворен код, използван за тестване на натоварването на уеб и приложни сървъри. Той поддържа множество протоколи и предоставя обширни възможности за отчитане.


