2009-08-12 14 views
3

キュウリ試験に関するプロファイラ/プロファイリング関連の問題。キュウリ試験(ルビー/レール)のプロファイリング

私たちのキュウリ試験の1つはかなり遅く実行されます。私たちのアプリケーションがどこに費やされているのかを推測する代わりに、私はプログラム的に知りたいです。

プロファイラでキュウリ試験を開始するにはどうすればよいですか? 「app.getは」のみ

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

をコンソールで動作し、プロファイラのスクリプトでは使用できませんので、これは結果を与えるが、私は持っている

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

これは動作しません:どのような動作しませんでした

このメソッドがボトルネックであると推測する

(私はキュウリ0.3.94、レール2.3.2、ルビー1.8.7(2008-08-11パッチレベル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

私はあなたのアプローチが気に入っていますが、残念ながら問題の可能性がある場所だけに焦点を当てる可能性があります。私はおそらく、hudsonのようなCIツールを使って実行できるより一般的なアプローチをしたいと思います。 –

+1

CIサーバー上でどのような値プロファイリングが追加されるのか分かりません。いずれにしても有用なものを得るために、プロファイリングデータを読むには人間が必要です。 – troelskn

7

また、最も遅いステップについての統計情報を得るために、キュウリの--formatの使用法を試してください。

+0

cucumber --formatプロファイルを使用すると、どのシナリオ(およびステップ)が遅いかを示すことができます。 1.8471970私は100のDKK#features/manager_overview.featureの1つの経費報告書で45のプロジェクトを管理しているとします:37 今、最も興味深いのは、最も重要なのは、私のアプリでは時間がかかっています! –

+7

FYI、 '--format profile'の名前が' --format usage'に変更されたようです。 – John

関連する問題