diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/dumpfm/millstone.clj | 61 |
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))))) |
