2009-08-12 9 views
3

Profiler/Profiling verwandtes Problem mit Gurken testen.Profiling eines Gurkentests (Rubin/Rails)

Einer unserer Gurkentests läuft ziemlich langsam. Anstatt zu raten, wo unsere Anwendung Zeit verbringt, würde ich es gerne programmatisch wissen.

Wie trigge ich einen Gurkentest mit einem Profiler aus?

Was nicht funktioniert:

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

Das funktioniert nicht, weil ‚app.get‘ nur in der Konsole arbeitet und nicht verfügbar für Profiler Skript

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

Daraus ergibt sich ein Ergebnis, aber ich habe zu erraten, dass diese Methode der Engpass ist

(Ich benutze Gurke 0.3.94, Schienen 2.3.2, Rubin 1.8.7 (2008-08-11 Patchlevel 72) [i686-darwin9.6.0])

Antwort

3

Ein weiteres Experiment ist eigentlich eine Antwort auf meine Frage aber nicht geben Sie mir aber geben Sie mir nicht wirklich ein besonders nützliches Ergebnis

$ 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 

Dies läuft tatsächlich die einzige Gurke Szenario auf Zeile 36, aber das Ergebnis ist nicht besonders nützlich

2

Mit ruby-prof können Sie den Profiler vor dem Betreff starten und danach wieder stoppen.

zB .:
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

Ich mag Ihren Ansatz, aber leider gibt es mir die Möglichkeit, nur auf das Problem zu konzentrieren, wo ich denke, das Problem sein könnte. Ich hätte gerne einen allgemeineren Ansatz, der vielleicht mit einem CI-Tool wie Hudson –

+1

ausgeführt werden kann Ich bin nicht sicher, welchen Wert Profiling auf dem CI-Server hinzufügen würde. Sie brauchen einen Menschen, um die Profiling-Daten zu lesen, um trotzdem etwas Nützliches daraus zu machen. – troelskn

7

Versuchen Sie auch Gurke - Format Verwendung, um einige Statistiken über die langsamsten Schritte zu erhalten.

+0

Die Verwendung von gurke --format Profil gibt mir einen Hinweis darauf, welche Szenarien (und Schritte) langsam laufen. Ich weiß schon, dass dieser Schritt wegen der vielen Kostenabrechnungen die Ursache für mein Problem ist: 1,8471970 Da ich verwalten 45 Projekte mit 1 Ausgabenberichte von 100 DKK # -Funktionen/manager_overview.feature: 37 Nun ist die interessanteste Teil ist, wo in meiner App es Zeit verbraucht! –

+7

FYI, es sieht aus wie '--format Profil' wurde jetzt umbenannt '--format Verwendung'. – John