summaryrefslogtreecommitdiff
path: root/test/dumpfm
diff options
context:
space:
mode:
authorScott Ostler <scottbot9000@gmail.com>2010-06-12 02:54:53 -0400
committerScott Ostler <scottbot9000@gmail.com>2010-06-12 02:54:53 -0400
commit312ec44ac49d5610204863d7b9d37f1d2875a9db (patch)
treeab0c38461533301ba004aec020a7de0329b59bd6 /test/dumpfm
parent3df0816ef86f3ba8be21275f469672801ef79027 (diff)
Updated test runner with path statistics
Diffstat (limited to 'test/dumpfm')
-rw-r--r--test/dumpfm/millstone.clj61
1 files changed, 39 insertions, 22 deletions
diff --git a/test/dumpfm/millstone.clj b/test/dumpfm/millstone.clj
index e59bb61..e693729 100644
--- a/test/dumpfm/millstone.clj
+++ b/test/dumpfm/millstone.clj
@@ -5,6 +5,7 @@
(def *spec*)
(def *cookies*)
+(def *results*)
(def printer (agent nil))
@@ -35,16 +36,19 @@
(defnk do-request! [path
:params nil
:method :GET]
- (let [[time res] (with-timing
- (do-base-request (:server *spec*)
- path
- method
- *cookies*
- params))]
- (log (format "%s - %sms [%s %s]" path time (:code res) (:msg res)))
- (if (:cookies res)
- (log "should set cookies" (:cookies res)))
- res))
+ (let [[ms resp] (with-timing
+ (do-base-request (:server *spec*)
+ path
+ method
+ *cookies*
+ params))
+ result {:path path
+ :ms ms}]
+ (dosync
+ (commute *results* conj result))
+ (if (:cookies resp)
+ (log "should set cookies" (:cookies resp)))
+ resp))
(defn build-client! [spec client-id]
(binding [*cookies* {}]
@@ -53,12 +57,26 @@
{:client-id client-id
:cookies *cookies*}))
-(defn print-run-results [spec elapsed]
- (log (format "\nFinished\n--------\n%s runs in %s s (%s r/s)\n%s clients"
+(defn sum [nums]
+ (reduce + nums))
+
+(defn avg [nums]
+ (float (/ (sum nums) (count nums))))
+
+(defn print-run-results [spec results elapsed-ms]
+ (log (format "\nFinished\n--------\n%s requests in %.02f s (%.02f r/s)\n%s clients"
(:requests spec)
- (/ elapsed 1000)
- (/ (:requests spec) elapsed 1000)
- (:clients spec))))
+ (/ elapsed-ms 1000)
+ (/ (:requests spec) (/ elapsed-ms 1000))
+ (:clients spec)))
+ (doseq [[path rs] (group-by :path results)]
+ (let [nums (map :ms rs)]
+ (log (format "\n%s:\nmin: %.02f ms\navg: %.02f ms\nmax: %.02f ms"
+ path
+ (apply min nums)
+ (avg nums)
+ (apply max nums)))))
+ (log ""))
(defn build-func-list [routes]
(flatten (for [[n f] routes]
@@ -70,21 +88,20 @@
(for [id (range (:clients spec))]
(build-client! spec id)))
funcs (build-func-list (:funcs spec))
- results (atom [])
+ results (ref [])
counter (atom (:requests spec))
threads (doall
(for [c clients]
(Thread.
(fn []
- (log "starting thread" (:client-id c))
- (binding [*spec* spec
- *cookies* (:cookies c)]
+ (binding [*spec* spec
+ *cookies* (:cookies c)
+ *results* results]
(loop []
(if (> (swap! counter dec) 0)
(let [f (rand-elt funcs)]
(f)
- (recur))))
- (log "finishing thread" (:client-id c)))))))]
+ (recur)))))))))]
(println "Finished setup")
(let [[elapsed _] (with-timing
(do
@@ -92,4 +109,4 @@
(.start t))
(doseq [t threads]
(.join t))))]
- (print-run-results spec elapsed)))))
+ (print-run-results spec @results elapsed)))))