還記得上一次做壓力測試已經是一年半多以前了 …
出來打混近兩年的創業經驗告訴我
要遇到 scalability 的問題也不是一件很容易的事情(默)
Multi-Mechanize (簡稱 MM) 是 VU-based 的壓力測試軟體
之所以選擇使用他是因為:
- MM 支援報表輸出
- VU-based (Virtual User)的模式,能夠依照需求一定程度的模擬使用者的行為
- 是 Python Solution,且撰寫時可以直接「參考」之前寫過的 functional testing 程式碼
不多說,不講解,直接附上參考資料:
比較入門的投影片:
進階的投影片,且提到其他壓力測試的東西:
所以安裝時間沒意外應該會比看完他全部的文件還要長 … Orz
MM 使用上的特點有:
- 用 multimech-newproject 建立專案; 用 multimech-run 執行壓力測試
- 執行壓力測試時,如果強行使用 control-c/d 中斷,並不會完全停止測試(因為有使用到 multiprocessing)
- mechanize.Browser 可以協助建立一瀏覽器物件,該物件有對 html form 進行操作的相關方法,亦支援 cookies 操作
- 不使用 mechanize.Browser 也無所謂,urllib2, httplib, httplib2, requests … 皆可使用
- 使用 Transaction 此 class 撰寫測試,如果比較喜歡在一個 transaction 內進行比較多測試,可以參考 Python Web 性能和压力测试 multi-mechanize 一文
- 設定檔內如果設定 threads = 50 ,即表示同時(先不管 python 實作的真實情況 XD)使用 50 個 VUs 來進行壓力測試,每個 VU 的行為都是「發送 -> 等回覆 -> 收到 -> 再發」的 loop 行為
- 測試結果會在 results 資料夾內建立新資料夾,含 csv, 圖檔, html … ,且支援直接將測試結果存到 DB 內(未實驗過)
個人小結論是,MM 沒有特別好用,但是也沒什麼不好的地方!
值得一提的是,其 VU 的概念
讓我這種之前用 ab 的業餘人士,花了一點時間才能夠理解過來
VU 的目的該是模擬同時有多少使用者,以此前提進行測試
而 ab 則單純依據參數產生固定的流量,以對伺服器進行測試
大體上,我認為 ab 是看八卦用的指標,畢竟很少有人上線的服務是回傳 hello world
自己家的機器,還是要真的去跑自己家真實的服務,測起來才會準確點 : )