Илья Пастушков
Функциональное тестирование
высоконагруженных проектов
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Расскажу...
Кто я?
• Специалист по тестированию в компании 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
на возможных конфигурациях,
• Выстраиваем зависимость,
• На её основе вычисляем соотношение
• Можно грабить корованы функционально проверять
• Что можно извлечь из тестов
• Почему результаты одиночного теста не показательны
• Как не потеряться среди огромного количества тестов
• Какими инструментами вообще всё это можно сделать
• И что из этого должно получиться
Сегодня я рассказал...
Вопросы?

Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)

  • 1.
  • 2.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Расскажу...
  • 3.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Расскажу...
  • 4.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Расскажу...
  • 5.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Расскажу...
  • 6.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Расскажу...
  • 7.
    Кто я? • Специалистпо тестированию в компании 2ГИС • Больше двух лет работаю в команде Unix.
  • 8.
    Кто я? • Специалистпо тестированию в компании 2ГИС • Больше двух лет работаю в команде Unix.
  • 9.
  • 10.
  • 11.
    • Unit-тесты • Регрессия •Нагрузочные • Функциональные • Автотесты Тестирование
  • 12.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 13.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 14.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 15.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 16.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 17.
    Тестирование самолётов Процесс: • Строятопытный образец • Ставят под нагрузку • Через 5-10 лет запускают модель в эксплуатацию • А самолёт стоит на стенде Даже если на тестах сломается, у авиакомпании будет 5-10 лет в запасе
  • 18.
    Поисковые сервисы 2014 • Сбербанк Аптеки Кафе Почта Такси • • • • 2015 •Парикмахерские Аптеки Почта Кафе Супермаркеты • • • •
  • 19.
    Серверы обновлений 2014 • Android4 iOS 7 Windows 8 • • 2015 • Android 6 iOS 9 Windows 10 • •
  • 20.
    Тестирование Функциональные тесты важныдаже для highload Проблемы: • "Проблема 34%" • Запрос пришёл и застрял
  • 21.
    Тестирование Функциональные тесты важныдаже для highload Проблемы: • "Проблема 34%" • Запрос пришёл и застрял
  • 22.
    Тестирование Функциональные тесты важныдаже для highload Проблемы: • "Проблема 34%" • Запрос пришёл и застрял
  • 23.
  • 24.
  • 25.
    Время • время откликасервера • время получения ответа клиентом • время отклика компонент
  • 26.
    Время • время откликасервера • время получения ответа клиентом • время отклика компонент
  • 27.
    Время • время откликасервера • время получения ответа клиентом • время отклика компонент
  • 28.
    Время. Откуда? • логи •мониторинг • сами
  • 29.
    Время. Откуда? • логи •мониторинг • сами
  • 30.
    Время. Откуда? • логи •мониторинг • сами
  • 31.
    Утилизация ресурсов • CPUusage • Memory usage • i/o per second • network latency
  • 32.
    Итог Всё это можетпроисходить п • кто-то кошмарит соседей по шакалы сжимают, тестеры • перебои с сетью не было ни единого разрыва visual studio отому что: виртуалке нагружают, админы бэкапят , а тут! или все обновляют
  • 33.
    Итог Всё это можетпроисходить п • кто-то кошмарит соседей по шакалы сжимают, тестеры • перебои с сетью не было ни единого разрыва visual studio отому что: виртуалке нагружают, админы бэкапят , а тут! или все обновляют
  • 34.
    Итог Всё это можетпроисходить п • кто-то кошмарит соседей по шакалы сжимают, тестеры • перебои с сетью не было ни единого разрыва visual studio отому что: виртуалке нагружают, админы бэкапят , а тут! или все обновляют
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
    Организация тестов • Вносимв тесты некоторую энтропию Проверяем одно, но разными кейсами • Мыслим не конкретными запросами, а категориями Негативные кейсы могут быть заткнуты исключениями
  • 40.
    Организация тестов • Вносимв тесты некоторую энтропию Проверяем одно, но разными кейсами • Мыслим не конкретными запросами, а категориями Негативные кейсы могут быть заткнуты исключениями
  • 41.
    Организация тестов • Вносимв тесты некоторую энтропию Проверяем одно, но разными кейсами • Мыслим не конкретными запросами, а категориями Негативные кейсы могут быть заткнуты исключениями
  • 42.
    Причины рандомизации Если сервисstateless: • поисковый сервис N раз найдёт x по запросу y • сервис поиска проезда выдаст N раз маршрут x по координатам y и z Stateless, statefull, не забываем про кэширование
  • 43.
    Причины рандомизации Если сервисstateless: • поисковый сервис N раз найдёт x по запросу y • сервис поиска проезда выдаст N раз маршрут x по координатам y и z Stateless, statefull, не забываем про кэширование
  • 44.
    Причины рандомизации Если сервисstateless: • поисковый сервис N раз найдёт x по запросу y • сервис поиска проезда выдаст N раз маршрут x по координатам y и z Stateless, statefull, не забываем про кэширование
  • 45.
    Причины рандомизации Если сервисstateful: • фиксируем состояние • GOTO предыдущий слайд
  • 46.
    Причины рандомизации Если сервисstateful: • фиксируем состояние • GOTO предыдущий слайд
  • 47.
  • 48.
    Методы • библиотека random (fuzzing) •ортогональные массивы
  • 49.
    Методы • библиотека random (fuzzing) •pairwise (комбинации пар)
  • 50.
  • 51.
    Цифры 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ую процентиль
  • 52.
    Цифры 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ую процентиль
  • 53.
    Цифры 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ую процентиль
  • 54.
    Цифры 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ую процентиль
  • 55.
    Цифры 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ую процентиль
  • 56.
  • 60.
    Я сломаль, ясломаль! Если есть тесты, которые не сработали, то внимательно смотрим на них: • запрос • время, ресурсы • предыдущие запросы
  • 61.
    Я сломаль, ясломаль! Если есть тесты, которые не сработали, то внимательно смотрим на них: • запрос • время, ресурсы • предыдущие запросы
  • 62.
  • 63.
    All tests passed! Есливсе тесты прошли -- смотрим ещё внимательнее: • пики точёны по времени/ресурсам - смотрим внимательно
  • 64.
    All tests passed! Есливсе тесты прошли -- смотрим ещё внимательнее: • 95ая, 98 процентиль по характеристике - лучший показатель НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ! Пример когда среднее не показатель: • половина запросов обрывается при соединении, те, что проходят - превышают SLA Итог - по среднему мы очень даже укладываемся
  • 65.
    All tests passed! Есливсе тесты прошли -- смотрим ещё внимательнее: • 95ая, 98 процентиль по характеристике - лучший показатель НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ! Пример когда среднее не показатель: • половина запросов обрывается при соединении, те, что проходят - превышают SLA Итог - по среднему мы очень даже укладываемся
  • 66.
    All tests passed! Есливсе тесты прошли -- смотрим ещё внимательнее: • 95ая, 98 процентиль по характеристике - лучший показатель НИ В КОЕМ СЛУЧАЕ НЕ БРАТЬ СРЕДНЕЕ! Пример когда среднее не показатель: • половина запросов обрывается при соединении, те, что проходят - превышают SLA Итог - по среднему мы очень даже укладываемся
  • 67.
    Highload edition • Нагрузкувыстраиваем линейно • Автоматизация во все поля Зеркалируем траффик с учётом масштабирования: • em proxy • gor
  • 68.
    Highload edition • Нагрузкувыстраиваем линейно • Автоматизация во все поля Зеркалируем траффик с учётом масштабирования: • em proxy • gor
  • 69.
    Highload edition • Нагрузкувыстраиваем линейно • Автоматизация во все поля Зеркалируем траффик с учётом масштабирования: • em proxy • gor
  • 70.
    Highload edition • Нагрузкувыстраиваем линейно • Автоматизация во все поля Зеркалируем траффик с учётом масштабирования: • em proxy • gor
  • 71.
    Арифметика масштабирования • Cобираемсоотношения траффика-утилизации-rps на возможных конфигурациях, • Выстраиваем зависимость, • На её основе вычисляем соотношение • Можно грабить корованы функционально проверять
  • 72.
    Арифметика масштабирования • Cобираемсоотношения траффика-утилизации-rps на возможных конфигурациях, • Выстраиваем зависимость, • На её основе вычисляем соотношение • Можно грабить корованы функционально проверять
  • 73.
    Арифметика масштабирования • Cобираемсоотношения траффика-утилизации-rps на возможных конфигурациях, • Выстраиваем зависимость, • На её основе вычисляем соотношение • Можно грабить корованы функционально проверять
  • 74.
    Арифметика масштабирования • Cобираемсоотношения траффика-утилизации-rps на возможных конфигурациях, • Выстраиваем зависимость, • На её основе вычисляем соотношение • Можно грабить корованы функционально проверять
  • 75.
    • Что можноизвлечь из тестов • Почему результаты одиночного теста не показательны • Как не потеряться среди огромного количества тестов • Какими инструментами вообще всё это можно сделать • И что из этого должно получиться Сегодня я рассказал...
  • 76.