[Thinknetica] Владимир Дементьев ― Профилирование и оптимизация тестов Rails-приложений (2024)
Воркшоп для Ruby и Rails разработчиков, которые хотят значительно сократить время ожидания выполнения тестов на CI и/или локально и тем самым ускорить цикл обратной связи при разработке, минимизировать задержку между публикацией изменений и их выкаткой, а также снизить расходы на CI-инфраструктуру.
Что будет:
Подходы
На воркшопе рассмотрим разные подходы для профилирования и оптимизации тестов, следующие принципу «максимум выгоды при минимуме изменений» (ведь никто не будет переписывать тесты или менять архитектуру приложения лишь для того, чтобы ускорить тесты).
Инструменты
Освоим такие общие инструменты для профилирования Ruby-приложений как Stackprof и Vernier, а также подробно познакомимся со специализированным пакетом TestProf.
Навыки
Полученные навыки вы сразу же сможете применить на своих проектах. И не удивляйтесь, если всего за несколько часов вы сможете ускорить ваши тесты в несколько раз!
Программа воркшопа
День 1. Проблема медленных тестов. Профилирование тестов как обычного Ruby-кода
На старте обсудим, почему медленные тесты влияют на процесс разработки. Рассмотрим различные способы ускорения тестов, не требующие профилирования и оптимизаций кода тестов.
Затем попробуем стандартные способы поиска узких мест в Ruby-коде для оптимизации тестов. Узнаем, какие классы проблем в тестах они способны диагностировать и как эти проблемы устранять.
В результаты вы:
узнаете об альтернативных, внешних (не требующих профилирования и рефакторинга) способах ускорения тестов и их ограничениях;
попробуете на практике такие инструменты профилирования, как StackProf, RubyProf, Vernier;
научитесь читать флеймграфы;
узнаете о типичных проблемах конфигурации тестов, которые значительно влияют на скорость выполнения.
День 2. Подробное знакомство с TestProf. Профилирование фабрик
Познакомитесь с инструментами профилирования, входящими в TestProf, которые позволяют сузить область рефакторинга тестов для минимизации отношения трудозатрат к полученному ускорению:
научитесь выделять медленные типы с помощью TagProf;
сможете оценивать влияние определённых методов или событий в коде на скорость выполнения с помощью EventProf;
разберетесь как профилировать использование фабрик с помощью FactoryProf.
В результате вы:
сможете определить небольшой набор тестов, оптимизация которых, с одной стороны, даст значительный прирост скорости, а с другой — позволит сформировать набор техник рефакторинга, специфичный для приложения.
День 3. Оптимизация тестов с помощью переиспользования данных. Автоматизация профилирования и рефакторинга
В завершающей части мы перейдём к оптимизации конкретных файлов и познакомимся с инструментами TestProf для переиспользования данных в тестах:
before_all / let_it_be для переиспользования данных в рамках контекста RSpec (локальные фикстуры);
AnyFixture для глобальных программно генерируемых фикстур.
В результате вы:
сформируете подходы к рефакторингу тестов, характерных для своего проекта, которые смогут быть применены к тестовым файлам для достижения желаемого ускорения.
В завершение обсудим возможности автоматизации, предоставляемые TestProf, в частности TestProf Autopilot.
Автор
Владимир Дементьев
разработчик в Злых марсианах, автор TestProf, контрибьютор в Rails, лауреат Ruby Hero Russia 2017
RoR-разработчик с 15-ти летним стажем.
Разработчик в EvilMartians
Кроме RoR, знает и применяет Erlang, Python, ActionScript, С++, Java
Коммитер в Rails, aвтор гемов AnyCable и LiteCable
Регулярно выступает на международных Ruby-конференциях на одной сцене с DHH и Матцем
Воркшоп для Ruby и Rails разработчиков, которые хотят значительно сократить время ожидания выполнения тестов на CI и/или локально и тем самым ускорить цикл обратной связи при разработке, минимизировать задержку между публикацией изменений и их выкаткой, а также снизить расходы на CI-инфраструктуру.
Что будет:
Подходы
На воркшопе рассмотрим разные подходы для профилирования и оптимизации тестов, следующие принципу «максимум выгоды при минимуме изменений» (ведь никто не будет переписывать тесты или менять архитектуру приложения лишь для того, чтобы ускорить тесты).
Инструменты
Освоим такие общие инструменты для профилирования Ruby-приложений как Stackprof и Vernier, а также подробно познакомимся со специализированным пакетом TestProf.
Навыки
Полученные навыки вы сразу же сможете применить на своих проектах. И не удивляйтесь, если всего за несколько часов вы сможете ускорить ваши тесты в несколько раз!
Программа воркшопа
День 1. Проблема медленных тестов. Профилирование тестов как обычного Ruby-кода
На старте обсудим, почему медленные тесты влияют на процесс разработки. Рассмотрим различные способы ускорения тестов, не требующие профилирования и оптимизаций кода тестов.
Затем попробуем стандартные способы поиска узких мест в Ruby-коде для оптимизации тестов. Узнаем, какие классы проблем в тестах они способны диагностировать и как эти проблемы устранять.
В результаты вы:
узнаете об альтернативных, внешних (не требующих профилирования и рефакторинга) способах ускорения тестов и их ограничениях;
попробуете на практике такие инструменты профилирования, как StackProf, RubyProf, Vernier;
научитесь читать флеймграфы;
узнаете о типичных проблемах конфигурации тестов, которые значительно влияют на скорость выполнения.
День 2. Подробное знакомство с TestProf. Профилирование фабрик
Познакомитесь с инструментами профилирования, входящими в TestProf, которые позволяют сузить область рефакторинга тестов для минимизации отношения трудозатрат к полученному ускорению:
научитесь выделять медленные типы с помощью TagProf;
сможете оценивать влияние определённых методов или событий в коде на скорость выполнения с помощью EventProf;
разберетесь как профилировать использование фабрик с помощью FactoryProf.
В результате вы:
сможете определить небольшой набор тестов, оптимизация которых, с одной стороны, даст значительный прирост скорости, а с другой — позволит сформировать набор техник рефакторинга, специфичный для приложения.
День 3. Оптимизация тестов с помощью переиспользования данных. Автоматизация профилирования и рефакторинга
В завершающей части мы перейдём к оптимизации конкретных файлов и познакомимся с инструментами TestProf для переиспользования данных в тестах:
before_all / let_it_be для переиспользования данных в рамках контекста RSpec (локальные фикстуры);
AnyFixture для глобальных программно генерируемых фикстур.
В результате вы:
сформируете подходы к рефакторингу тестов, характерных для своего проекта, которые смогут быть применены к тестовым файлам для достижения желаемого ускорения.
В завершение обсудим возможности автоматизации, предоставляемые TestProf, в частности TestProf Autopilot.
Автор
Владимир Дементьев
разработчик в Злых марсианах, автор TestProf, контрибьютор в Rails, лауреат Ruby Hero Russia 2017
RoR-разработчик с 15-ти летним стажем.
Разработчик в EvilMartians
Кроме RoR, знает и применяет Erlang, Python, ActionScript, С++, Java
Коммитер в Rails, aвтор гемов AnyCable и LiteCable
Регулярно выступает на международных Ruby-конференциях на одной сцене с DHH и Матцем
Скрытое содержимое могут видеть только пользователи групп(ы): VIP