4

キュウリのテストに関するプロファイラー/プロファイリング関連の問題。

私たちのキュウリテストの1つはかなり遅いです。アプリケーションがどこで時間を費やしているのかを推測するのではなく、プログラムで知りたいのです。

プロファイラーでキュウリテストをトリガーするにはどうすればよいですか?

うまくいかなかったもの:

  $ 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(2008-08-11パッチレベル72)[i686-darwin9.6.0]を使用しています)

4

3 に答える 3

8

また、cucumber --format の使用法を試して、最も遅いステップに関する統計を取得してください。

于 2009-08-12T23:11:43.173 に答える
3

もう1つの実験は、実際には私の質問に対する答えですが、私には得られませんでしたが、特に有用な結果は得られませんでした

$ 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行目で単一のキュウリのシナリオを実行しますが、結果は特に有用ではありません

于 2009-08-12T12:01:04.060 に答える
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
于 2009-08-12T11:58:12.727 に答える