Могу ли я повторно использовать свой комплект интеграционных тестов для профилирования приложения Rails?

Большинство постов по профилированию Rails рекомендуют Ruby-Prof. Использовать Ruby-Prof Мне нужно написать хотя бы один новый тест для каждого действия контроллера, а затем вручную сравнить результаты, чтобы увидеть, что займет больше всего времени и может стать кандидатом на оптимизацию.

Это хорошо, если я уже точно знаю, на какую просьбу я обращаю внимание. Кажется, не очень хорошо, если я пытаюсь определить горячие точки в первую очередь. Учитывая, что у меня уже есть огромный набор интеграционных тестов, охватывающий все функции приложения, которые меня волнуют, кажется, что я действительно хочу сделать следующее:

  1. Запустите весь набор тестов и запишите время, потраченное на каждое действие контроллера. (Или метод модели, или любой уровень детализации, который я хочу.)
  2. Выведите два списка времени наихудшего и среднего времени в каждом действии контроллера.
  3. Сортируйте каждый список и начинайте исследовать самые продолжительные действия контроллера, теперь используя Ruby-prof или другие инструменты профилирования для детализации стека вызовов. В наихудшем случае будут определены параметры запроса, которые могут быть проблематичными (т. Е. Вызвать медленный код на бэкэнде), без необходимости думать обо всех них, когда я пишу тест производительности.

Есть ли какая-то причина, по которой люди не используют набор тестов интеграции таким образом, вместо того, чтобы просто дублировать его со вторым набором тестов производительности? Я не видел, что предложено. Прежде чем писать код, чтобы сделать что-то вроде этого (предположительно с before_action в ApplicationControllerЕсть ли уже инструмент для этого?

1 ответ

Я думаю, что автоматизированные тесты не скажут вам ничего о производительности. Вам нужны реальные данные. Например, ваши тесты, вероятно, не будут использовать индексы, но если вы создадите 10000 записей без индекса, вы можете столкнуться с проблемой производительности.

Мне нужно написать хотя бы один новый тест для каждого действия контроллера

Зачем вам тестировать производительность каждого действия контроллера?

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

Кроме того, если вы используете онлайн-инструменты для повышения производительности, нет необходимости менять код. Онлайн-инструмент работает с экземпляром развернутого приложения.

Другие вопросы по тегам