Функциональное тестирование высоконагруженных...

Post on 16-Apr-2017

624 Views

Category:

Engineering

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Илья Пастушков

Функциональное тестированиевысоконагруженных проектов

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Расскажу...

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Расскажу...

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Расскажу...

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Расскажу...

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Расскажу...

Кто я?

• Специалист по тестированию в компании 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

на возможных конфигурациях,

• Выстраиваем зависимость,

• На её основе вычисляем соотношение

• Можно грабить корованы функционально проверять

• Что можно извлечь из тестов

• Почему результаты одиночного теста не показательны

• Как не потеряться среди огромного количества тестов

• Какими инструментами вообще всё это можно сделать

• И что из этого должно получиться

Сегодня я рассказал...

Вопросы?

top related