Тестирование производительности Содержание лекции Зачем нужно тестировать производительность? Виды тестирования производительности Нагрузочное тестирование Тест на выносливость Стресс-тест Тест на работу при нехватке ресурсов Тест на масштабируемость Зачем нужно тестировать производительность? Как правило, при разработке ПО указывается необходимая производительность при определённых конфигурациях сервера/ПО Тестирование производительности позволяет выявить несоответствие между ожидаемой и реальной производительностью системы, а также слабые места и возможные проблемы. Тестирование производительности затрагивает не только ПО как таковое, но и особенности конфигурации ПО и аппаратные средства. Виды тестирования производительности Нагрузочное тестирование (load testing) Тест на выносливость (endurance testing) Стресс-тест (stress-test) Тест на работу при нехватке ресурсов (exhaust test) Тест на масштабируемость (scalability test) Нагрузочное тестирование Основной вид тестирования производительности Используется для определения времени отклика при фиксированной нагрузке либо Используется для определения нагрузки, не превышающей фиксированное время отклика Термины Время отклика – время, в течение которого система обрабатывает время действия пользователя и возвращает результат. Нагрузка (в данном контексте) – количество запросов, посылаемых на сервер за единицу времени. Производительность системы – способность выдерживать определённую нагрузку Нагрузочное тестирование Тестирование производительности заключается в эмуляции различных действий большого количества пользователей. Последовательность действий пользователя называется сценарием. Качество тестировании производительности во многом зависит от проработки сценариев. Сценарии Сценарии должны быть максимально приближены к реальности Сценарии могут быть сколь угодно сложными При разработке сценариев важно понимать структуру тестируемого ПО и особенности аппаратного и программного обеспечения В большинстве ПО для нагрузочного тестирования существует возможность параметризации сценариев Нагрузочное тестирование Результатом нагрузочного тестирования обычно является график зависимости времени отклика от нагрузки (или наоборот) Выглядит он примерно так: Average response time for user profiles 14,00 12,00 10,00 response time, sec 8,00 Active reader average Passive reader average Forum user average 6,00 4,00 2,00 ,00 1230 1360 1490 1620 1750 Users online 1880 2010 2140 2270 Время отклика (Response time) Согласно исследованиям, впечатления пользователей от зугрузки страницы вылядят так: <1c – отлично 1с-3с – хорошо 3с-6с – приемлимо 6с-12с – неприемлимо, очень плохо >12c – убейте меня Тест на выносливость Проводится для того, чтобы убедиться в неизменности производительности с течением времени Тестирование осуществляется при рассчётной нагрузке в течение продолжительного (сутки, или даже больше) времени Если система стабильно, время отклика не должно изменяться. Также не должны изменяться значения счётчиков производительности на сервере. Счётчики производительности на сервере Загрузка процессоров (CPU load) Выделение памяти (RAM usage) Очередь обращения к HDD Стресс-тест Проводится для того, чтобы узнать при какой нагрузке упадёт система, и главное – сможет ли она сама оправиться от падения. Также очень важно выяснить, не произойдёт ли непоправимых сбоев при падении системы. Стресс-тест проводится при 300% - 1000% рассчётной загрузке в течении непродолжительного времени (15-30 мин) Тест на работу при нехватке ресурсов Проводится для того, чтобы узнать сможет ли система работать при нехватке системных ресурсов Если система сможет так работать, нужно определить какой параметр больше всего влияет на производительность, и как сильно Проводится при 100% рассчётной нагрузке в течение длительного времени, при этом, после «прогревочного» периода на сервере урезают один из ресурсов (CPU, RAM, HDD) Тест на масштабируемость Проводится для того, чтобы определить как изменится производительность системы при изменении характеристик сервера Проводится при 100% рассчётной нагрузке в течение длительного времени, при этом через определённый интервал времени на сервере изменяется один из параметров (CPU, RAM, HDD) с небольшим шагом.