Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

738 views

Published on

В докладе я расскажу о следующем:
+ почему тема доклада не оговорка, а абсолютно реальная вещь;
+ что можно извлечь из результатов теста помимо «да/нет»;
+ в каких случаях «количество» = «качество»;
+ когда «один в поле не воин»;
+ немного о том, зачем тестировщику нужна матстатистика;
+ как избежать случайностей в результатах;
+ «буря в стакане» или масштабируем highload в docker/openvz;
+ почему фиксация запросов в тестах приводит к фиксации сервиса на продакшене;
+ а также всё вышеперечисленное на примерах наших проектов.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

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

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

×