2013-03-27 10 views
7

Ich baue eine kleine Website für den persönlichen Gebrauch, um eine API meiner Firma zu testen. Mein Chef möchte eine Website, auf der wir eine Website eingeben, ein Formular mit GET oder POST anfordern und die Anzahl der Anfragen senden können. Er möchte, dass die Anfrage protokolliert wird, die Zeit pro Anfrage und die durchschnittliche Zeit für alle Anfragen.Messen Antwortzeit für eine HTTP-Anfrage mit Ruby

Gibt es eine Möglichkeit, die Antwortzeit für eine GET- oder POST-Anfrage mit Ruby zu messen?

Ich schaute durch die Net :: HTTP-Bibliothek, aber sah nichts, die die Zeit zurück gab.

Gibt es Websites, die das bereits tun? Sie müssten eine GUI haben, damit Nicht-Techies sie benutzen können. Wenn nicht, plane ich ein einfaches Formular, das ein Skript ausführt, die Ausgabe dieses Skripts in eine Textdatei oder eine Tabelle schreibt und es dann an den Benutzer sendet.

Haben Sie noch weitere Vorschläge? (Eine nette AJAX aussehende Oberfläche könnte gut funktionieren, würde aber wahrscheinlich Datenbank-Speicher erfordern. Bei 10000 Anfragen pro Lauf, das saftigen bekommen konnte.

+1

Was Rubys Benchmark-Modul über die Verwendung? – jstim

+0

sehr gute Frage ist es. –

+0

Benchmark scheint wie es könnte funktionieren - [Ich fand diesen Beitrag] (http://blog.segment7.net/2010/05/07/net-http-is-not-slow) wo es aussieht, dass genau das ist, was er verwendet . Ich werde mit meinem Chef diskutieren, vielleicht fragen und sehen, ob das wahrscheinlich die beste Methode ist. – Squadrons

Antwort

17

Wie in den Kommentaren erwähnt, hat Rubin eine benchmark module

require "benchmark" 

time = Benchmark.measure do 
    #requests 
end 
+0

Benchmark ging es gut, danke. – Squadrons

3

Warum sollte Net :: HTTP kümmern sich um Reaktionszeit? Das ist nicht seine Aufgabe.

Vor und nach Ihrer Anfrage Verwendung Time.now zu setzen und mal Ende beginnen:

start_time = Time.now 
# ...do request... 
elapsed_time = Time.now - start_time 

Falls Sie Fragen mitteln wollen, fügen Sie die elapsed_time Werte zusammen und dividieren durch die Anzahl der Tests:

total_time += elapsed_time 
# ... do some stuff... 
average_time = total_time/num_of_iterations 

Die Zeit reicht bis in die Mikrosekunde, was für Ihre Bedürfnisse viel genauer sein sollte.

Sie sind auf eigene Faust für die Schnittstelle, da das ein ganz anderes Thema ist und ein Buch darstellen würde.

Und, BTW, schuldest du mir eine Stunde deiner Löhne, um einen Teil deiner Arbeit für dich zu erledigen.

+2

Upvoted für den Snark! – ireddick

+0

Erfinden Sie das Rad nicht neu. Verwenden Sie "Benchmark". – Reactormonk

+2

Während ich Benchmark für viele Dinge verwende - du wirst es in vielen meiner Antworten hier finden, und ich benutze es wahrscheinlich mehr als jeder andere, der mit Ruby Antworten arbeitet - es ist für diese Aufgabe übertrieben. Benchmark ist wunderbar, wenn ich mehrere Algorithmen testen möchte und die formatierten Zeitdetails für Benutzer- und Systemaufgaben benötigt. In diesem Fall müssen sie nur wissen, wie lange es dauert, einen Anruf zu tätigen und dann die Ergebnisse mitteln. Benchmarks formatierte Ergebnisse müssen erneut analysiert und aufgeteilt werden, um an den gleichen Ort zu gelangen, den ein einfacher Durchschnitt erhält. –