Илья Пастушков
Функциональное тестированиевысоконагруженных проектов
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
Кто я?
• Специалист по тестированию в компании 2ГИС
• Больше двух лет работаю в команде Unix.
Кто я?
• Специалист по тестированию в компании 2ГИС
• Больше двух лет работаю в команде Unix.
Чем занимаетсякоманда Unix
Наши сервисы
• Unit-тесты
• Регрессия
• Нагрузочные
• Функциональные
• Автотесты
Тестирование
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Тестирование самолётов
Процесс:
• Строят опытный образец
• Ставят под нагрузку
• Через 5-10 лет запускают модель в эксплуатацию
• А самолёт стоит на стенде
Даже если на тестах сломается,у авиакомпании будет 5-10 лет в запасе
Поисковые сервисы
2014
• Сбербанк
Аптеки
Кафе
Почта
Такси
•
•
•
•
2015
• Парикмахерские
Аптеки
Почта
Кафе
Супермаркеты
•
•
•
•
Серверы обновлений
2014
• Android 4
iOS 7
Windows 8
•
•
2015
• Android 6
iOS 9
Windows 10
•
•
Тестирование
Функциональные тесты важны даже для highload
Проблемы:
• "Проблема 34%"
• Запрос пришёл и застрял
Тестирование
Функциональные тесты важны даже для highload
Проблемы:
• "Проблема 34%"
• Запрос пришёл и застрял
Тестирование
Функциональные тесты важны даже для highload
Проблемы:
• "Проблема 34%"
• Запрос пришёл и застрял
Функциональныетесты
Friend or foe? Да или нет?
А если подумать?
Время
• время отклика сервера
• время получения ответа клиентом
• время отклика компонент
Время
• время отклика сервера
• время получения ответа клиентом
• время отклика компонент
Время
• время отклика сервера
• время получения ответа клиентом
• время отклика компонент
Время. Откуда?
• логи
• мониторинг
• сами
Время. Откуда?
• логи
• мониторинг
• сами
Время. Откуда?
• логи
• мониторинг
• сами
Утилизация ресурсов
• CPU usage
• Memory usage
• i/o per second
• network latency
Итог
Всё это может происходить п
• кто-то кошмарит соседей по
шакалы сжимают, тестеры
• перебои с сетью
не было ни единого разрыва
visual studio
отому что:
виртуалке
нагружают, админы бэкапят
, а тут! или все обновляют
Итог
Всё это может происходить п
• кто-то кошмарит соседей по
шакалы сжимают, тестеры
• перебои с сетью
не было ни единого разрыва
visual studio
отому что:
виртуалке
нагружают, админы бэкапят
, а тут! или все обновляют
Итог
Всё это может происходить п
• кто-то кошмарит соседей по
шакалы сжимают, тестеры
• перебои с сетью
не было ни единого разрыва
visual studio
отому что:
виртуалке
нагружают, админы бэкапят
, а тут! или все обновляют
Можно держатьэто в голове
Можномониторить
А можно уточнить
Нужно большетестов
Организация тестов
• Вносим в тесты некоторую энтропию
Проверяем одно, но разными кейсами
• Мыслим не конкретными запросами, а категориями
Негативные кейсы могут быть заткнутыисключениями
Организация тестов
• Вносим в тесты некоторую энтропию
Проверяем одно, но разными кейсами
• Мыслим не конкретными запросами, а категориями
Негативные кейсы могут быть заткнутыисключениями
Организация тестов
• Вносим в тесты некоторую энтропию
Проверяем одно, но разными кейсами
• Мыслим не конкретными запросами, а категориями
Негативные кейсы могут быть заткнутыисключениями
Причины рандомизации
Если сервис stateless:
• поисковый сервис N раз найдёт x по запросу y
• сервис поиска проезда выдаст N раз
маршрут x по координатам y и z
Stateless, statefull, не забываем про кэширование
Причины рандомизации
Если сервис stateless:
• поисковый сервис N раз найдёт x по запросу y
• сервис поиска проезда выдаст N раз
маршрут x по координатам y и z
Stateless, statefull, не забываем про кэширование
Причины рандомизации
Если сервис stateless:
• поисковый сервис N раз найдёт x по запросу y
• сервис поиска проезда выдаст N раз
маршрут x по координатам y и z
Stateless, statefull, не забываем про кэширование
Причины рандомизации
Если сервис stateful:
• фиксируем состояние
• GOTO предыдущий слайд
Причины рандомизации
Если сервис stateful:
• фиксируем состояние
• GOTO предыдущий слайд
Методы
• библиотека random (fuzzing)
Методы
• библиотека random
(fuzzing)
• ортогональные массивы
Методы
• библиотека random
(fuzzing)
• pairwise (комбинации пар)
Средства визуализации
• Цифры
• Графики
• Отчёты
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
01.
02.
03.
04.
На выходе получим величину, которая больше чем в 95%запросов, т.е. 95ую процентиль
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
01.
02.
03.
04.
На выходе получим величину, которая больше чем в 95%запросов, т.е. 95ую процентиль
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
01.
02.
03.
04.
На выходе получим величину, которая больше чем в 95%запросов, т.е. 95ую процентиль
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
01.
02.
03.
04.
На выходе получим величину, которая больше чем в 95%запросов, т.е. 95ую процентиль
Цифры
sort -n input.txt > sorted.txt
awk '{all[NR] = $0} END
{print all[int(NR*0.95 - 0.5)]}' sorted.txt
???
PROFIT!!!
01.
02.
03.
04.
На выходе получим величину, которая больше чем в 95%запросов, т.е. 95ую процентиль
Графики
Я сломаль, я сломаль!
Если есть тесты, которые не сработали, то
внимательно смотрим на них:
• запрос
• время, ресурсы
• предыдущие запросы
Я сломаль, я сломаль!
Если есть тесты, которые не сработали, то
внимательно смотрим на них:
• запрос
• время, ресурсы
• предыдущие запросы
All tests passed!
All tests passed!
Если все тесты прошли -- смотрим ещё внимательнее:
• пики точёны по времени/ресурсам - смотрим внимательно
All tests passed!
Если все тесты прошли -- смотрим ещё внимательнее:
• 95ая, 98 процентиль по характеристике - лучший показатель
НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ!
Пример когда среднее не показатель:
• половина запросов обрывается при соединении, те, что
проходят - превышают SLA
Итог - по среднему мы очень даже укладываемся
All tests passed!
Если все тесты прошли -- смотрим ещё внимательнее:
• 95ая, 98 процентиль по характеристике - лучший показатель
НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ!
Пример когда среднее не показатель:
• половина запросов обрывается при соединении, те, что
проходят - превышают SLA
Итог - по среднему мы очень даже укладываемся
All tests passed!
Если все тесты прошли -- смотрим ещё внимательнее:
• 95ая, 98 процентиль по характеристике - лучший показатель
НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ!
Пример когда среднее не показатель:
• половина запросов обрывается при соединении, те, что
проходят - превышают SLA
Итог - по среднему мы очень даже укладываемся
Highload edition
• Нагрузку выстраиваем линейно
• Автоматизация во все поля
Зеркалируем траффик с учётом масштабирования:
• em proxy
• gor
Highload edition
• Нагрузку выстраиваем линейно
• Автоматизация во все поля
Зеркалируем траффик с учётом масштабирования:
• em proxy
• gor
Highload edition
• Нагрузку выстраиваем линейно
• Автоматизация во все поля
Зеркалируем траффик с учётом масштабирования:
• em proxy
• gor
Highload edition
• Нагрузку выстраиваем линейно
• Автоматизация во все поля
Зеркалируем траффик с учётом масштабирования:
• em proxy
• gor
Арифметика масштабирования
• Cобираем соотношения траффика-утилизации-rps
на возможных конфигурациях,
• Выстраиваем зависимость,
• На её основе вычисляем соотношение
• Можно грабить корованы функционально проверять
Арифметика масштабирования
• Cобираем соотношения траффика-утилизации-rps
на возможных конфигурациях,
• Выстраиваем зависимость,
• На её основе вычисляем соотношение
• Можно грабить корованы функционально проверять
Арифметика масштабирования
• Cобираем соотношения траффика-утилизации-rps
на возможных конфигурациях,
• Выстраиваем зависимость,
• На её основе вычисляем соотношение
• Можно грабить корованы функционально проверять
Арифметика масштабирования
• Cобираем соотношения траффика-утилизации-rps
на возможных конфигурациях,
• Выстраиваем зависимость,
• На её основе вычисляем соотношение
• Можно грабить корованы функционально проверять
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Сегодня я рассказал...
Вопросы?