Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Я спросил у сервера...
Илья Пастушков
Сегодня я расскажу
•  Что можно извлечь из тестов
•  Почему результаты одиночного теста не показательны
•  Как не потеряться среди огромного количества тестов
•  Какими инструментами вообще всё это можно сделать
•  И что из этого должно получиться
2
Кто я?
•  Специалист по тестированию в компании 2ГИС
•  Больше двух лет работаю в команде Unix.
3
Чем занимается
команда Unix
Наши сервисы
5
Тестирование
•  Unit­тесты
•  Регрессия
•  Нагрузочные
•  Функциональные
•  Автотесты
6
Тестирование самолётов
Процесс:
•  Строят опытный образец
•  Ставят под нагрузку
•  Через 5­10 лет запускают модель в эксплуатацию
•  А самолёт стоит на стенде
Даже если на тестах сломается, у авиакомпании будет 5­10 лет в
запасе
7
Тестирование
Проблемы:
•  "Проблема 34%"
•  Запрос пришёл и застрял
Функциональные тесты важны даже для highload
8
Функциональные тесты
Friend or foe? Да или нет?
А если подумать?
Время
•  время отклика сервера
•  время получения ответа клиентом
•  время отклика компонент
11
Время. Откуда?
•  логи
•  мониторинг
•  сами
12
Утилизация ресурсов
•  CPU usage
•  Memory usage
•  i/o per second
•  network latency
13
Итог
Всё это может происходить потому что:
•  кто­то кошмарит соседей по виртуалке
шакалы сжимают, тестеры нагружают, админы бэкапят
•  перебои с сетью
не было ни единого разрыва, а тут! или все обновляют visual
studio
14
Можно держать это в голове
Можно мониторить
А можно уточнить
НУЖНО БОЛЬШЕ ТЕСТОВ!
Организация тестов
•  Вносим в тесты некоторую энтропию 
Проверяем одно, но разными кейсами
•  Мыслим не конкретными запросами, а категориями
Негативные кейсы могут быть заткнуты исключениями
19
Причины рандомизации
Если сервис stateless:
•  поисковый сервис N раз найдёт x по запросу y
•  сервис поиска проезда выдаст N раз
маршрут x по координатам y и z
Stateless, statefull, не забываем про кэширование
20
Причины рандомизации
Если сервис stateful:
•  фиксируем состояние
•  GOTO предыдущий слайд
21
Методы
•  библиотека random (fuzzing)
22
Методы
•  библиотека random (fuzzing)
•  pairwise (комбинации пар)
23
Методы
•  библиотека random
(fuzzing)
•  pairwise (комбинации пар)
•  ортогональные массивы
24
Средства визуализации
•  Цифры
•  Графики
•  Отчёты
25
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
На выходе получим величину, которая больше чем в 95%
запросов, т.е. 95ую процентиль
01.
02.
03.
04.
26
Графики
27
Отчёты
«Я спросил у сервера...», Илья Пастушков
Я сломаль, я сломаль!
Я сломаль, я сломаль!
Если есть тесты, которые не сработали, то 
внимательно смотрим на них:
•  запрос
•  время, ресурсы
•  предыдущие запросы
•  пример когда предыдущий ломает последующий
31
All tests passed!
All tests passed!
Если все тесты прошли ­­ смотрим ещё внимательнее:
•  пики точёны по времени/ресурсам ­ смотрим очень внимательно
33
All tests passed!
Если все тесты прошли ­­ смотрим ещё внимательнее:
•  95ая, 98 процентиль по характеристике ­ лучший показатель 
НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ!
Пример когда среднее не показатель:
•  половина запросов обрывается при соединении, те, что
проходят ­ превышают SLA 
Итог ­ по среднему мы очень даже укладываемся
34
Highload edition
•  Нагрузку выстраиваем линейно
•  Автоматизация во все поля
Зеркалируем траффик с учётом масштабирования:
•  em proxy
•  gor
35
Арифметика масштабирования
•  Cобираем соотношения траффика­утилизации­rps
на возможных конфигурациях,
•  Выстраиваем зависимость,
•  На её основе вычисляем соотношение
•  Можно грабить корованы функционально проверять
36
Пример
37
Сегодня я рассказал
•  Что можно извлечь из тестов
•  Почему результаты одиночного теста не показательны
•  Как не потеряться среди огромного количества тестов
•  Какими инструментами вообще всё это можно сделать
•  И что из этого должно получиться
38
Вопросы?

More Related Content

«Я спросил у сервера...», Илья Пастушков