サイトのストレスをテストするツールをclojureで書きました

2653 ワード

説明:
サイトのストレステストツールにはab、jmeterなどがたくさんあります.しかし、本当に自分のシステムをテストするとき、特にダイナミックなシステム、例えばoaシステムでは、それらのツールは使いにくいようです.(私が深く研究していないのかもしれません).
問題:
1、ユーザーはログインする必要がある
2、ユーザーの操作習慣に従って、一連のurlに順番にアクセスする
ソース:
https://github.com/jianglibo/pressure-it
使用方法:
(defn oa-user-login
  [cs]
  (let [login-url "http://someappurl.cc/Login"]
    (client/post login-url {:form-params {:fLoginVerification 1
                                          :Username "username"
                                          :Password "password"
                                          :DBPath "/domcfg.nsf"
                                          :Path_Info "/index.nsf"
                                          :Path_Info_Decoded "/index.nsf"
                                          :SaveOptions 1
                                          :$PublicAccess 1}
                            :cookie-store cs})))

(def oa-user-request-urls
  ["http://someurl.cc"
   "http://someurl.cc/RndStr={{rand}}"])

(pressure-it/benchmark [oa-user-login oa-user-request-urls 20 5])

oa-user-loginはログインコードであり、oa-user-request-urlsはiframeでもajaxでもユーザがWebページを開くときにバックグラウンドを要求する経路を観察することによって可能である.
benchmarkのパラメータは、関数にログインし、urlリストにアクセスし、ユーザー数(スレッド数)、何回か繰り返します.
あなたが得た報告は以下の通りです.
7361549 [nREPL-worker-19] INFO  pressure-it.core  - total time costs:  46086
nil
user=> (require '[pressure-it.pressure-this :as pmy] :reload)
7593807 [nREPL-worker-20] INFO  pressure-it.core  - thread number:  30
7593865 [nREPL-worker-20] INFO  pressure-it.core  - ({"http:///db_publicaffair.nsf/Toppic?OpenForm&RndStr={{rand}}"
  {:request-num 150,
   :total-download 94734,
   :success
   {:request-num 18, :slowest 3055, :fastest 2882, :average 2997.5},
   :failure {:request-num 132}}}
 {"http:///TopBottomFrameSetWin?Open
Form&path=/db_mqhb.nsf&fTitle=%E6%B0%91%E6%83%85%E4%BC%9A%E5%
8A%9E&RndStr={{rand}}"
  {:request-num 150,
   :total-download 0,
   :success {:request-num 0, :slowest nil, :fastest nil, :average -1},
   :failure {:request-num 150}}}
 {"http:///db_printview.nsf/PeoplePrintView?O
penAgent&infoid=mqhb_Info&path=app&dbname=db_mqhb.nsf"
  {:request-num 150,
   :total-download 512424,
   :success
   {:request-num 44, :slowest 3060, :fastest 239, :average 2214.068},
   :failure {:request-num 106}}})

7593865 [nREPL-worker-20] INFO  pressure-it.core  - total time costs:  46266
nil

30人の同時ユーザの場合,このoaはほとんど利用できないことがわかる.
TODO:
認証コードがある場合は、認証コードピクチャをディスクに保存し、認証コードの入力をユーザーに促す必要があります.