CodeFest 2018. Денис Трифонов (2ГИС) — Как мы непрерывно тестируем производительность 30 проектов

CodeFest 2018. Денис Трифонов (2ГИС) — Как мы непрерывно тестируем производительность 30 проектов

Посмотрите выступление Дениса: https://2018.codefest.ru/lecture/1318/

Тестирование производительности — не самый первый пункт в списках проверки качества. Чтобы убедить менеджера включить задачу в спринт, нужно максимально упростить эту задачу. Я расскажу историю и поделюсь опытом построения автоматизированной инфраструктуры для тестирования производительности 30 проектов от бекендов до мобилок. Начиналось всё просто — один общий Jenkins и репозиторий с тестами, а потом стало больно. Мы не отчаялись и взялись за дело. Знания и тесты в ходе перестройки передали в команды, взяли CI first подход к автоматизации, построили инфраструктуру из максимально переиспользуемых компонентов для соседних команд и общего стенда. По итогу 14 строчек кода на быстрый старт и час на интеграцию для полного покрытия и непрерывного тестирования проекта.

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 05, 2018
Tweet

Transcript

  1. Как мы непрерывно тестируем производительность 30 проектов Денис Трифонов Специалист

    по тестированию производительности, 2ГИС
  2. Обо мне Занимаюсь тестированием производительности бекендов внешних продуктов 2ГИС. 2

  3. Первые шаги — нагружаем Справочное API Яндекс.Танком — сравниваем старую

    и новую версии — используем контур стейджинга 3
  4. © George Shuklin

  5. Подключаем новые проекты — формируем команду — нагружаем Фото и

    Авторизацию — берём Gatling для сценариев — переиспользуем код 5
  6. Cloud Apps CI Runners Tests Автоматизируем — поднимаем Jenkins и

    слейв с инструментами — делаем сборку Gatling, наследуемся от неё в проектах — пишем прослойку с конфигами : : 6
  7. Cloud Apps CI Runners Tests Metrics Exporters Dashboards Мониторим —

    поднимаем InfluxDB — ставим на машинки Telegraf — поднимаем Grafana с дашбордами : : : 7
  8. Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Хотим

    фичи — прикручиваем диффер — прикручиваем логи медленных запросов — прикручиваем графики SLA : : : 8
  9. Подключаем ещё проекты — выделяем общие компоненты BaseRequest, BaseTest —

    определяем пакет с core 9
  10. И вот их перевалило за 20

  11. © www.trainmania.com.ua

  12. Плюсы — быстрый старт нового проекта — переиспользование кода и

    фич — полуавтоматизация и однопоточность тестов — интерфейс запуска и конфигурации тестов — множество технологий на пощупать и выбрать 12
  13. Минусы — постоянное участие в правках общего репозитория — при

    изменении core нужно следить за всеми проектами — три слоя конфигурации — ручной запуск, просьбы запустить — на поддержке множество технологий 13
  14. Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Узкие

    места : : : 14
  15. Ещё людей? Всё переделываем?

  16. © www.pskovrail.ru

  17. План перестройки — избавиться от общего репозитория и core —

    разнести тесты по командам — погрузить команду в тестирование — забыть про интерфейсы и полностью автоматизировать — посмотреть, можно ли что-то переиспользовать 17
  18. Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Кодим

    — переносим в отдельные репозитории и убираем core — делаем тесты самодостаточными — отдаём в команды : : : 18
  19. Нюансы и факты — 15% повторяемого кода — Scala не

    так страшна 19
  20. Cloud Apps VCS, CI Analitycs Runners Tools Tests Metrics Exporters

    Dashboards Автоматизируем — переносим на общий GitLab и GitLab CI — поднимаем Shared runners с docker-executor — создаём docker-образ со всеми инструментами : : : 20
  21. Нюансы — оверхед с Docker не замечен — тюнить нужно

    хост и docker-рантайм — могут быть сложности с пакетами в «одной коробке» — UI нет, поэтому меняем конфигурацию в ветках 21
  22. Погружаем в тестирование — проводим мастер-классы — готовим документацию и

    примеры 22
  23. Факты — компетентность людей в нагрузке стала выше — стали

    тестировать не только перед релизом 23
  24. Cloud Apps VCS, CI Analitycs Runners Tools Tests Metrics Exporters

    Dashboards Мониторим — переезжаем на общие Prometheus и Grafana — используем Ansible роли экспортёров : : : 24
  25. Нюансы — договариваемся с админами об увеличении частоты сбора метрик

    — поднимаем Push Gateway для Graphite-метрик Gatling 25
  26. Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards

    Analitycs Смотрим в аналитику — выделяем фиче-скрипты в сервис с UI, открытым API и CLI — дружим с Gatling и Яндекс.Танк : : : 26
  27. Факты — к сервису подключились тесты мобилок и фронтенда 27

  28. Учимся в Kubernetes — поднимаем рабочую ноду в нагрузочном контуре

    — добавляем kubectl в образ с инструментами 28
  29. Стучимся в процессы — обсуждаем производительность на техническом ревью проектов

    29
  30. Что получилось — на поддержке минимум технологий — используем общие

    компоненты — команды вовлечены в процесс тестирования — тотальная автоматизация 30
  31. Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards

    Analytics Admins Perf Teams Инфраструктура : : : Legend: 31
  32. Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards

    Analytics Common Teams Хотим стрелять во внешний сервис? : : : Legend: 32
  33. Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards

    Analytics Common Teams Хотим свои нагрузочные мощности? : : : Legend: 33
  34. Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards

    Analytics Common Teams Хотим добавить аналитику? : : : Legend: 34
  35. Новый проект: тест phantom: address: example.org load_profile: load_type: rps schedule:

    line(1, 100, 30s) const(100, 120s) uris: - "/" 35
  36. Новый проект: CI test: image: docker-hub/perf/tools script: - yandex-tank -c

    load.yaml after_script: - cli upload tags: [ perf ] 36
  37. 14 LOC

  38. 2 года

  39. 1 человек

  40. © blog.allo.ua

  41. Простые советы — на малом числе активных проектов можно выделить

    core — легаси пусть остаётся легаси — автоматизируйте всё и вся — переиспользуйте и делайте проще — шарьте знания, найдите круг заинтересованных 41
  42. Денис Трифонов dentrifonov.github.io Спасибо!