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