2009-08-12 3 views
3

Профилирование/профилирование, связанное с тестированием огурца.Профилирование теста огурца (рубин/рельсы)

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

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

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

$ 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, ruby ​​1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.6.0])

ответ

3

еще один эксперимент на самом деле ответ на мой вопрос, но не дал мне, но на самом деле не дают мне особенно полезный результат

$ 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, но результат не особенно полезен

2

Используя 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 
+0

Мне нравится ваш подход, но, к сожалению, он дает мне возможность сосредоточиться только там, где я думаю, что проблема может быть. Мне нужен более общий подход, который может быть запущен с помощью инструмента CI, такого как hudson. –

+1

Я не уверен, что добавит значение профилирования на сервере CI. Вам нужен человек, чтобы читать данные профилирования, чтобы получить что-нибудь полезное из них в любом случае. – troelskn

7

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

+0

Использование профиля cucumber --format дает мне представление о том, какие сценарии (и шаги) работают медленно. Я уже знаю, что этот шаг является основной причиной моей проблемы из-за многих отчетов о расходах: 1.8471970 Учитывая, что я управляю 45 проектами с 1 отчетами о расходах из 100 DKK # features/manager_overview.feature: 37 Теперь самое интересное часть - это то, где в моем приложении он использует время! –

+7

FYI, похоже, что '--format profile' теперь переименован в' --format usage'. – John