Докучаев. Основы тестирования ПО - Лекция #5.pptx
- Количество слайдов: 83
Курс «Основы тестирования ПО» Лекция № 5 «Нагрузочное тестирование вебприложений» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014
Вводная Сегодня на лекции: 1. 2. 3. 4. 5. 6. Цели. Виды тестов производительности Процесс нагрузочного тестирования Инструменты Метрики Анализ результатов Живой пример 2
Вводная Литература: 1. Performance Testing Guidance for Web Applications 2. Ian Molyneaux - The Art of Application Performance Testing 3. Henry H. Liu - Software Performance and Scalability: A Quantitative Approach 3
Вводная Отвечает на вопрос: насколько быстро работает под нагрузкой? 4
Вводная Тестирование производительности - тестирование, которое проводится с целью определения, как быстро работает вычислительная система или её часть под определённой нагрузкой. 5
Цель 6
Цель 7
Цель 8
Цель 9
Цель 10
Цель 11
Цель 12
Цель Какова цель теста? 13
Цель 1. Пропускная способность (сoncurrency/throughput) Сколько человек могут одновременно работать с сайтом? Какой объём трафика может обработать данный узел сети? Сколько транзакций может быть совершено за фиксированный период времени? 14
Цель 2. Время ответа сервера (server response time) Сколько времени мы ждали ответ от сервера после отправки? Сколько времени ушло на ответ от банка банкомату на запрос о выдачи наличных? Сколько времени БД обрабатывала SQL запрос? 15
Цель 3. Время отображения (render response time) Сколько времени уходит что бы отрендерить главную страницу сайта в IE 10? Сколько времени ушло на полную загрузку картинки с котятами? Сколько времени прорисовывалась гуглкарта, после перехода по координатам? 16
Цель 4. Отсутствие регрессии Имеется страница с топом самых успешных компаний. Эта страница в предыдущей версии открывалась за 3 секунды, а в новой открывается за 6 секунд. Если мы не используем нагрузку, то протестируем производительность. Если используем нагрузку, то проведём нагрузочное тестирование. 17
Цель 5. Определение узкого места Когда принимается решение об увеличении производительности системы, нужно выбрать с какой части стоит начать это улучшение. Определением этой части часто занимаются инженеры по нагрузочному тестированию. В нашем случае это три проекта: • Топ-20 самых медленных методов • Топ-40 самых часто используемых • Стресс-тестирование через сценарии 18
Цель 6. Определение причины падения производительности В случае возникновения различных проблем на сайте, особенно на продакшене, требуется воспроизвести условия, при которых возникает данная проблема. Данная цель является самой сложной, т. к. связана не только с неопределённостью результатов, но и с неопределённостью условий. 19
Цель 7. Проверка на соответствие спецификации/SLA Соглашение об уровне предоставления услуги (англ. Service Level Agreement (SLA)) – некий документ, среди прочего описывающий уровень качества предоставляемой услуги. Например какой обязательно должен быть uptime у выделенного сервера. Сколько времени ждать ответа при аутентификации 20
Цель 8. Как часть деятельности по предотвращению DOS при атаках Выявление всех мест в системе, которые можно использовать для проведения DOS/DDOS атаки. 21
Типы тестов производительности 22
Типы тестов производительности Нагрузочное тестирование - тестирование, которое проводится с целью определения поведения системы под заданной ожидаемой нагрузкой. 23
Типы тестов производительности Нагрузочное тестирование Используется для: • определения пропускной способности • определения функциональных ошибок под нагрузкой • определяем, сколько человек смогут одновременно пользоваться системой • определяет недостаток ресурсов при текущей конфигурации • … 24
Типы тестов производительности Стресс тестирование - тестирование, которое проводится с целью определения максимальных возможностей системы и поведение системы, при нагрузках, превышающих пиковый показатели. 25
Типы тестов производительности Стресс тестирование Используется для: • определения повреждения данных при больших нагрузках • определения уровня нагрузки, после которого, замедление переходит в ошибки • DOS/DDOS тестирования • для определения быстроты восстановления после критических нагрузок 26
Типы тестов производительности Тестирование стабильности и надёжности - тестирование, целью которого является проверка работоспособности приложения при длительном тестировании с ожидаемым и экстремальным уровнем нагрузки. 27
Типы тестов производительности Тестирование стабильности и надёжности Для чего используется: • для фиксации утечек памяти • выявления ухудшения времени выполнения транзакций • для более приближенных к реальности тестов 28
Типы тестов производительности Конфигурационное тестирование – тестирование производительности, при котором подбирается оптимальная конфигурация системы. 29
Типы тестов производительности Конфигурационное тестирование Для чего используется: • для подбора оптимальной конфигурации элемента системы (конфигурация железа, настроек вебсервера, оптимальной ширины канала, настроек тестируемого приложения) • для определения наличия проблем при смене конфигурации 30
Инструменты 31
Инструменты 32
Инструменты 1. Разные задачи 2. Разные продукты 3. Разные цели 33
Инструменты 34
Инструменты Вспомогательные инструменты: • http-прокси (Fiddler) • инструмент для анализа временных рядов (python + numpy + pandas + matplotlib) • СУБД (sql-light) • Firefox + firebug • … 35
Инструменты Visual Studio Load Test 36
Инструменты HP Load Runner 1 000 $ за лицензию на три года Высокая стабильность Превосходная документация Лучшая техподдержка Мощнейший аналитический блок и корреляционный механизм 37
Инструменты Borland Silk. Performer Много дешевле, чем Load. Runner Нестабильность при высоких нагрузках Меньшая гибкость 38
Инструменты Apache JMeter Бесплатный Многофункциональный Хорошее сообщество Небольшая гибкость во время нагрузки Состояния «паники» при начальном ознакомлении Нестабильность при больших 39 нагрузках
Инструменты Yandex Tank Бесплатен Очень быстр Отзывчивое сообщество Из коробки малофункционален Сложно развернуть 40
Сценарии При помощи инструмента разрабатываем сценарий нагрузки: 1. Вручную, анализируя техдокументацию приложения и работая с прокси (e. g. Fiddler) 2. Автоматически, записывая трафик от пользователей, обрабатывая его, а затем воспроизводя 41
Метрики 42
Метрики Главная метрика – процент довольных пользователей 43
Метрики на стороне сервера: • • Процессор (CPU) Память (Memory) Задержки в работе с дисковой подсистемой (I/O delay) Объём трафика (Network Traffic) Блокировки в БД (Database Locking) Очереди на каждом из узлов … 44
Метрики на стороне клиента: • • Время ответа (Response time) Время ожидания (Latency) Число пользователей/потоков (Users) Число обращений (Hits) Число ответов (Responses) Число ошибок или кодов ответа (Codes, Errors) Пропускная способность (Throughput) … 45
Метрики Время ответа (Response time) – время между началом отправки запроса до получения последнего байта запроса. Терминал Сеть Сервер Сеть Терминал 46
Метрики Время ответа (Response time) – время между началом отправки запроса до получения последнего байта запроса. Терминал Сеть Сервер Сеть Терминал 47
Метрики Время ожидания (latency time) – время между началом отправки запроса до получения первого байта запроса. Терминал Сеть Сервер Сеть Терминал 48
Метрики Время ожидания (latency time) – время между началом отправки запроса до получения первого байта запроса. Терминал Сеть Сервер Сеть Терминал 49
Метрики Число пользователей/потоков (users) – число виртуальных пользователей, которые задействованы в тестировании за указанных промежуток времени (e. g. секунда, минута) Для простоты можно воспринимать каждого пользователя как поток, в рамках которого можно выполнять тот или иной сценарий. В более сложных сценариях (e. g. эмулирующих профиль нагрузки при работе из браузера) число потоков может не соответствовать числу виртуальных пользователей. 50
Метрики Число обращений (hits) – число запросов, которые были отправлены за определённый промежуток времени (чаще всего за одну секунду) Число ответов (responses) – число ответов, которые были получены за определённый промежуток времени Число ошибок (errors) – число запросов за единицу времени, которые были сочтены ошибочными (5 xx, 4 xx коды ответов и пофейленные ассерты) Число запросов (throughput) – число запросов-ответов за единицу времени Throughput = (number of requests) / (total time) 51
Метрики При периодическом считывании метрик получаем несколько выборок (по кол-ву метрик). Т. к. значения у нас имеют порядок и снабжены отметками времени, то мы получаем временные ряды. response time per second = [1, 34, 55, 77, 45, 3, 1] number of error codes per second = [0, 0, 0, 23, 55, 11, 0, 0] users per second = [1, 1, 10, 10, 10] Мы получаем одинаковые объекты, к которым можем применять математический аппарат для проведения анализа. Одинаковая форма для каждой метрики даёт единообразие методов. 52
Метрики Показатели для выборок: • • • минимальное и максимальное значения среднее арифметическое (avg) перцентиль (percentile) медиана (median) нормальное значение (normal value) среднеквадратичное отклонение (standard deviation) 53
Метрики 54
Метрики Перцентиль (percentile) – это некое значение ниже которого находится указанный процент значений из выборки. Перцентиль позволяет проанализировать разброс значений и отбросить аномальные и статистически не существенные значения из выборки. 55
Метрики Медиана (median) – значение, которое делит всю выборку на две части, таким образом, что 50% значений из выборки больше этого значения, а остальные 50% меньше. Медиана – это важный 50 -ый перцентиль, а так же значение, которое ближе всего к общепринятому понятию «среднего» , в отличие от среднего арифметического. Очень хорошо борется с различного рода всплесками. 56
Метрики Нормальное значение или мода (normal value, mode) – значение из выборки, которое встречается наиболее часто. rtp = [1, 34, 55, 77, 45, 3, 1] mode(rtp) = 1 Мода – вариант среднего для нечисловых значений. Для числовых значений позволяет выявить аномалии. Например, если у нас часто в выборке присутствует число 5 мс, то мы можем решить, что данные метода закэшировались и тест нужно переделать, отключив кэш. 57
Метрики 58
Метрики Подозрительные данные/результаты: • • равномерное распределение не нормальное распределение если более 20% результатов не похожи на остальные если 90% перцентиль любого из тестовых прогонов больше максимального из других прогонов или меньше минимального • если графики от испытания к испытанию заметно «прыгают» 59
Метрики Аномальные значения можно отбрасывать при соблюдении следующих условий: • • • они не повторяются от испытания к испытанию их количество меньше 1% от всей выборки отстоят от медианы более чем на три среднеквадратичных отклонения Все метрики рекомендуется пересчитывать без данных аномальных значений. На практике при регрессионном тестировании 10% улучшение/ухудшение не показатель 60
Объект нагрузки 61
Объект нагрузки Для того, что бы провести нагрузочное тестирование необходимо изучить следующие части системы, которую будем нагружать: 1. 2. 3. 4. Сетевую архитектуру Конфигурацию узлов (какое железо, какой софт, какая ОС, etc. ) Архитектуру приложения Подробное описание работы тестируемого узла 62
Объект нагрузки Вебсервер БЛ БД 63
Объект нагрузки Статика Препроцессор postgres Redis Сервер статики Диспетчер Сервис управления облаком Сервис аутентификации Сервис форматов Сервис классификаторов … Сервер БЛ 64
Объект нагрузки Статика Препроцессор postgres Redis Сервер статики Диспетчер Сервис управления облаком Сервис аутентификации Сервис форматов Сервис классификаторов … Сервер БЛ 65
Объект нагрузки Статика Препроцессор postgres Redis Сервер статики Диспетчер Сервис управления облаком Сервис аутентификации Сервис форматов Сервис классификаторов … Сервер БЛ 66
Объект нагрузки Статика Препроцессор postgres Redis Сервер статики Диспетчер Сервис управления облаком Сервис аутентификации Сервис форматов Сервис классификаторов … Сервер БЛ 67
Объект нагрузки Статика Препроцессор postgres Redis Сервер статики Диспетчер Сервис управления облаком Сервис аутентификации Сервис форматов Сервис классификаторов … Сервер БЛ 68
Проведение тестирования 69
Проведение тестирования Как «много» нужно тестировать? Все данные получены эмпирически и в целом схожи с аналогичными в других компаниях/командах. Для тестирования производительности требуется минимум 100 значений для репрезентативной выборки. Нужно проводить минимум два испытания, желательно три, в идеале более 5 Тест должен длится не менее 10 -15 минут для нагрузочного теста. 70
Проведение тестирования Что нужно предпринять перед началом нагрузочного теста? Согласовать проведение теста (с разработкой, сборщиками, тестировщиками) Изолировать тестируемую систему (например блокировать IP отличные от наших) После блокировки перепроверять/выставлять исходные настройки тестируемой системы 71
Проведение тестирования Что нужно делать во время теста? Чаще всего запускаем ночью, когда нужные стенды свободны, поэтому по факту ничего делать не нужно. Смириться с тем, что всё проконтролировать не получится, как бы мы не старались, но стремится к этому нужно. Если аномалий меньше 5%, то не обращаем внимания, если больше 10%, то останавливаем тестирование (используем автостопперы) 72
Проведение тестирования Пример Цель: проверить соответствует ли производительность сервиса авторизации SLA, по которому авторизация должна осуществляться быстрее чем за 1 секунду при нагрузке в 50 запросов в секунду. Дополнительная цель: выявить верхнюю границу производительности, после которой мы получаем ошибки. 73
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 74
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 75
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 76
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 77
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 78
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 79
Объект нагрузки IIS Диспетчер БЛ Сервис авторизации postgres Redis Сервер БЛ 80
Метрики Живой пример 81
Вопросы есть? 82
Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. 3435) sbis. ru Разработка СБИС