Профилирование теста огурца (ruby/rails)

Проблема, связанная с профилированием/профилированием, при тестировании Cucumber.

Один из наших тестов на огурцы работает довольно медленно. Вместо того, чтобы гадать, где наше приложение тратит время, я хотел бы знать это программно.

Как запустить тест на огурец с помощью профайлера???

Что не получилось:

  $ URL=/projects/by/114951412 #URL to slow rails page
  $ script/performance/profiler 'app.get "$URL"' 50

Это не работает, потому что app.get работает только в консоли и недоступен для скрипта профилировщика.

  $ EXPENSIVE_METHOD="Project.find('6300003243').aggregated_total_amount"
  $ script/performance/profiler "$EXPENSIVE_METHOD" 50

Это дает результат, но я должен предположить, что этот метод является узким местом

(Я использую огурец 0.3.94, рельсы 2.3.2, рубин 1.8.7 (патч-уровень 72 от 11 августа 2008 г.) [i686-darwin9.6.0])


person Jesper Rønn-Jensen    schedule 12.08.2009    source источник


Ответы (3)


Также попробуйте использовать огурец --format, чтобы получить статистику о самых медленных шагах.

person Aslak Hellesøy    schedule 12.08.2009
comment
Использование профиля огурца --format дает мне представление о том, какие сценарии (и шаги) выполняются медленно. Я уже знаю, что этот шаг является основной причиной моей проблемы из-за большого количества отчетов о расходах: 1.8471970 Учитывая, что я управляю 45 проектами с 1 отчетом о расходах по 100 датских крон # features/manager_overview.feature:37 Теперь самое интересное, где в мое приложение использует время! - person Jesper Rønn-Jensen; 13.08.2009
comment
К вашему сведению, похоже, что --format profile теперь переименован в --format usage. - person John; 21.12.2010

Еще один эксперимент на самом деле является ответом на мой вопрос, но не дал мне, но не дает особо полезного результата.

$ PROJECT_DIR=`pwd`
$ which cucumber
/usr/local/bin/cucumber
$ ln -s `which cucumber` cukes #required for profiler to have local file in next step
$ ruby-prof cukes -- features/manager_overview.feature:36

Это фактически запускает сценарий с одним огурцом в строке 36, но результат не особенно полезен.

person Jesper Rønn-Jensen    schedule 12.08.2009

Используя ruby-prof, вы можете запускать профилировщик перед кодом темы и снова останавливать его после. например.:

require 'ruby-prof'
RubyProf.start
# code here
result = RubyProf.stop

# You can then output the trace in different ways.
# Simply print a overview to stdout
printer = RubyProf::FlatPrinter.new(result)
printer.print($stdout, :min_percent => 0.1)

# Save a callgrind trace
# You can load this up in kcachegrind or a compatible tool.
printer = RubyProf::CallTreePrinter.new(result)
File.open "callgrind.out.42", 'w' do |file|
  RubyProf::CallTreePrinter.new(result).print(file)
end
person troelskn    schedule 12.08.2009
comment
Мне нравится ваш подход, но, к сожалению, он дает мне возможность сосредоточиться только на том, где, по моему мнению, может быть проблема. Мне нужен более общий подход, который, возможно, можно запустить с помощью инструмента CI, такого как hudson. - person Jesper Rønn-Jensen; 12.08.2009
comment
Я не уверен, какую ценность добавит профилирование на сервере CI. Вам нужен человек, чтобы читать данные профилирования, чтобы извлечь из них что-то полезное. - person troelskn; 13.08.2009