370.49K
Category: programmingprogramming

01.02. Тестирование производительности

1.

Тестирование
производительности

2.

Вспоминаем
Тестирование производительности (нагрузочное тестирование) – автоматизированное
тестирование, имитирующее работу определенного количества бизнес пользователей на
общем ресурсе (сервере).
Относится к нефункциональным тестам.

3.

Зачем нужно тестировать
производительность?
Как правило, при разработке ПО указывается необходимая производительность при
определённых конфигурациях сервера/ПО
Тестирование производительности позволяет выявить несоответствие между ожидаемой
и реальной производительностью системы, а также слабые места и возможные проблемы.
Тестирование производительности затрагивает не только ПО как таковое, но и
особенности конфигурации ПО и аппаратные средства.

4.

Метрики производительности
Скорость: Как быстро загружается страница? Скорость — это время отрисовки
страницы, время обработки API-запроса или пропускная способность сети при передаче
больших файлов.
Стабильность: Нормально ли, стабильно ли ведет себя система, не возникают ли
ошибки, мешающие работе? Для оценки стабильности учитывается количество ошибок.
Масштабируемость: Если понадобилось увеличить/расширить/углубить/укрупнить
систему, то сколько это будет стоить и сколько времени? А если количество
пользователей сервиса удвоится за год? А если в 10 раз? Для оценки масштабируемости
нужно проанализировать использование ресурсов под разными нагрузками.

5.

Узкие места
Нагрузка на базу данных: Является ли количество запросов, которые посылаются к базе
данных, адекватным ее мощностям? Как быстро выполняются запросы?
Пиковое использование памяти: Будет ли что-то «тяжелое» в вычислительном плане? Как
это будет масштабироваться? И масштабируется ли вообще?
Аппаратное обеспечение: Пропускная способность сети в компании — узкое место;
проблема с аппаратным обеспечением мало актуальна для сервисов, выведенных в
облако.
Процессор: Когда загрузка процессоров слишком высокая, все развалится на части?
Место на жестком диске: Лог-файлы и другие файлы, постоянно «пополняемые»
приложением, при длительной работе могут занять неисчислимое количество гигабайт на
диске.
Соединения: Может быть максимальное количество HTTP-коннектов/коннектов с базой
данных.

6.

Основные термины
Время отклика –время, в течение которого система обрабатывает время действия
пользователя и возвращает результат.
Нагрузка (в данном контексте) –количество запросов, посылаемых на сервер за единицу
времени.
Производительность системы –способность выдерживать определённую нагрузку

7.

Время отклика (Response time)
Согласно исследованиям, впечатления пользователей от загрузки страницы выглядят так:
<1c –отлично
1с-3с –хорошо
3с-6с –приемлемо
6с-12с –неприемлемо, очень плохо
>12c – УДАЛИТЕ ЭТО

8.

Сценарии
Сценарии должны быть максимально приближены к реальности
Сценарии могут быть сколь угодно сложными
При разработке сценариев важно понимать структуру тестируемого ПО и особенности
аппаратного и программного обеспечения

9.

Виды тестирования
производительности
Нагрузочное тестирование (load testing)
Тест на выносливость (endurance testing)
Стресс-тест (stress-test)
Тест на работу при нехватке ресурсов (exhaust test)
Тест на масштабируемость (scalability test)
Тестирование стабильности или надежности (stability/reliability testing)
Объемное тестирование (volume testing)

10.

Нагрузочное тестирование (load
testing)
Основной вид тестирования производительности
Используется для определения времени отклика при фиксированной нагрузке либо
используется для определения нагрузки, не превышающей фиксированное время отклика
Цель — увидеть поведение тестируемой системы под ожидаемой нагрузкой.
Результатом нагрузочного тестирования обычно является график зависимости времени
отклика от нагрузки (или наоборот) :

11.

Тест на выносливость (endurance
testing)
Проводится для того, чтобы убедиться в неизменности производительности с течением
времени
Тестирование осуществляется при расчётной нагрузке в течение продолжительного (сутки,
или даже больше) времени
Если система стабильно, время отклика не должно изменяться. Также не должны
изменяться значения счётчиков производительности на сервере.

12.

Стресс-тест (stress-test)
Проводится для того, чтобы узнать при какой нагрузке упадёт система, и главное –сможет
ли она сама оправиться от падения.
Цель стресс-тестирования — «сломать систему».
Также очень важно выяснить, не произойдёт ли непоправимых сбоев при падении
системы.
Приложение тестируется под экстремальной нагрузкой в течении непродолжительного
времени (15-30 мин), чтобы увидеть, когда/где/как все ломается

13.

Тест на работу при нехватке ресурсов
(exhaust test)
Проводится для того, чтобы узнать сможет ли система работать при нехватке системных
ресурсов
Если система сможет так работать, нужно определить какой параметр больше всего влияет
на производительность, и как сильно
Проводится при 100% расчётной нагрузке в течение длительного времени, при этом, после
«прогревочного» периода на сервере урезают один из ресурсов (CPU, RAM, HDD)

14.

Тест на масштабируемость (scalability
test)
Проводится для того, чтобы определить как изменится производительность системы при
изменении характеристик сервера
Проводится при 100% расчётной нагрузке в течение длительного времени, при этом через
определённый интервал времени на сервере изменяется один из параметров (CPU, RAM,
HDD) с небольшим шагом.

15.

Тестирование стабильности или
надежности (stability/reliability testing)
Тестирование стабильности — это попытка ответить на вопрос, как система работает в
течение длительного времени. Цель: подтвердить, что система будет работать надежно и
долго.
Проблемы, которые будут обнаружены при таком тестировании:
- Исчерпание количества возможных подключений к БД
- Неожиданные перезагрузки серверов
- Утечки ресурсов, например, памяти
- Журналы или другие файлы, которые «раздувают» систему

16.

Пример требований
При нагрузке до 100 одновременно работающих с системой клиентов:
среднее время отклика должно составлять не более 2,5 секунд,
количество отказов не должно превышать 1%
дисперсия не должна превышать 5%
сервер приложений должен потреблять не более 50% CPU и не более 1,2
гигабайта ОЗУ

17.

Инструменты для тестирования
производительности
Locust — это инструмент тестирования
производительности, который позволяет
вам определить веб-пользователей,
отправляющих HTTP-запросы. Locust
автоматически измеряет время отклика и
отмечает пройденные/проваленные
тесты. Для этого используется файл
locustfile.py.

18.

Инструменты для тестирования
производительности
Apache JMeter — это
инструмент нагрузочного
тестирования на основе
протокола. JMeter имитирует
трафик и одновременных
пользователей. Он похож на
Locust, но работает быстрее.

19.

K6
K6 — это инструмент для
нагрузочного тестирования. С
помощью него можно писать тесты
производительности на JavaScript.
Вы можете записывать действия
пользователей с помощью плагина
Chrome и визуализировать
результаты в Grafana.
English     Русский Rules