Профилирование тестов со StackProf
StackProf — это профайлер для Ruby, использующий механизм сэмплирования стеков вызовов.
TestProf предоставляет удобный интерфейс для работы со StackProf.
Инструкция
Установите гем stackprof (>=0.2.9):
# Gemfile
group :development, :test do
gem "stackprof", ">= 0.2.9", require: false
endTestProf позволяет запускать StackProf в двух режимах: для всего запуска тестов (global) или для индивидуальных тестов (per-example).
Для профилирования выполнения всех тестов (от загрузки до завершения) укажите переменную окружения TEST_STACK_PROF:
TEST_STACK_PROF=1 bundle exec rake test
# или для RSpec
TEST_STACK_PROF=1 rspec ...Либо программно в коде:
TestProf::StackProf.runПрофилирование индивидуальных тестов доступно только для RSpec, так как использует теги.
Добавьте тег :sprof для профилирования конкретного примера:
it "is doing heavy stuff", :sprof do
# ...
endПримечание: индивидуальное профилирование не работает, если уже активировано глобальное.
Формат отчёта
StackProf предоставляет CLI для работы с «сырыми» файлами отчётов, в том числе для генерации отчётов в разных форматах.
По умолчанию TestProf в конце прогона тестов показывает команду, которую необходимо выполнить в терминале для формирования отчёта в формате HTML (эту команду необходимо запустить самостоятельно).
Если вы хотите получить отчёт в JSON формате (например, для использования в speedscope), вам необходимо использовать stackprof версии >=0.2.13.
Для работы с более старыми версиями вы можете использовать TestProf: укажите переменную окружения TEST_STACK_PROF_FORMAT=json или добавьте аналогичную опцию в настройках:
TestProf::StackProf.configure do |config|
config.format = "json"
endПрофилирование загрузки приложения (boot time)
Время загрузки приложения в тестовом окружении также влияет на общее время выполнения тестов. Вы можете профилировать загрузку приложения с помощью StackProf с помощью следующей команды:
TEST_STACK_PROF=boot rspec ./spec/some_spec.rbПримечание Для анализа загрузки приложения мы рекомендуем использовать отчёт в формате флеймграфов.
Настройка
Вы можете поменять режим работы StackProf с помощью переменной окружения TEST_STACK_PROF_MODE (wall по умолчанию).
Вы также можете изменить интервал сэмплирования с помощью переменной окружения TEST_STACK_PROF_INTERVAL:
- для режимов
wallиcpu— микросекунды (1000 по умолчанию вstackprof); - для режима
object— число аллокаций (1 по умолчаниюstackprof).
Все настройки доступны в stack_prof.rb.