1、簡介node
Locust是一款使用Python編寫的壓力測試工具,本篇總結會介紹在實際測試過程當中遇到的問題python
https://www.locust.io/web
使用Locust的緣由是由於能夠模擬的用戶數量能夠經過添加硬件來增加,相對於jmeter來講配置更加方便。redis
2、需求描述flask
項目採用node+redis+oracle的模式,須要測試出單臺服務器的性能瓶頸。瀏覽器
3、實際測試服務器
環境的搭建:服務器上只須要安裝好Python2.7及以上的版本,而後經過pip安裝locust就完成了搭建。併發
一、 pip安裝(python的包管理工具,沒有pip則不能安裝第三方庫)python有兩個主流的包管理工具easy_install.py和pip,easy_install.py是安裝python的時候默認安裝的,而pip僅以zip文件的形式保存的python目錄中,須要咱們手動的安裝oracle
【命令】:E:\python\Scripts\pip.exe分佈式
這裏的路徑爲你安裝的python路徑,找到安裝目錄中\Scripts文件夾下pip文件便可安裝pip(這裏已經安裝好了)
二、 gevent庫的安裝
【命令】: E:\python\Scripts\pip.exe install gevent
三、 flask庫的安裝
【命令】:E:\python\Scripts\pip.exe install flask
注:若是不知道版本號能夠直接安裝flask包,系統會安裝不一樣版本的包(不建議使用)
四、 request庫的安裝
【命令】:E:\python\Scripts\pip.exe install requests==2.18.1
注:安裝庫的時候若不知道版本號,能夠直接輸入命令E:\python\Scripts\pip.exe install requests== 從報錯信息中查看全部的版本號(建議安裝最新的版本)
五、 msgpack-python庫的安裝
【命令】:E:\python\Scripts\pip.exe install msgpack-python==0.4.8
六、 six庫的安裝
【命令】:E:\python\Scripts\pip.exe install six==1.11.0
七、 pyzmq庫的安裝
【命令】:E:\python\Scripts\pip.exe install pyzmq
八、 locust的安裝(最後一步)
【命令】:E:\python\Scripts\pip.exe install locustio
腳本編寫:根據需求編寫好python腳本,放到服務器上如 locust1.py。
腳本運行:一般使用的是主從模式來運行腳本,這樣可以方便進程多開。
打開python27目錄,輸入命令:
cd /d E:\Python27\locust-master
locust -f locust1.py --master
該命令運行後會生成一個主進程進行管理,主進程只須要一個。
locust -f locu.py --slave
該命令運行後會有一個子進程啓動,根據須要能夠屢次運行就會開啓多個子進程,子進程用來模擬用戶數量。
若是須要多進程就要打開多個窗口開進程:
以上命令運行後或默認開啓8089 端口,經過瀏覽器訪問本地8089端口就能進入web界進行控制。
訪問地址: http://localhost:8089,slave 就是開啓的子進程數量。
若是不一樣的機器,加後綴主機master的IP:
locust -f ../Python27/load_test1.py --slave --master-host=*ip
3.用戶數量的詳細解釋
web界面的user 數量表示併發數,也就是每次訪問的併發鏈接數。實踐的時候用戶數量是300,表示每次訪問有300個用戶同時訪問,吞吐量能達到2000/s,說明在一秒的時間內服務器響應了大約7次,那麼300的用戶耗費的時間就是140ms左右。
4.用戶數量與slvae關係
用戶數量是300,slave爲3,那麼每一個slave會平均分配發送的用戶量100,與jmerter分佈式不同。
5、最終測試結果
服務器配置:CPU 8核 內存16G
承受最大業務量900萬次請求數,佔用內存12G,佔用磁盤空間23G。
redis與業務量關係 80萬請求數佔用1G redis內存
磁盤與業務量關係 80萬請求數佔用2G 磁盤空間
附錄:
locust -f ../locust-master/load_test.py --master
從新開終端窗口
locust -f ../locust-master/load_test.py --slave
遠程連接阿里雲服務器
在Win10系統下使用「WIN+R」組合快捷鍵打開運行對話框,而後輸入「mstsc",點擊肯定
輸入服務器IP
QPS: 每秒鐘處理完請求的次數;注意這裏是處理完。具體是指發出請求到服務器處理完成功返回結果。能夠理解在server中有個counter,每處理一個請求加1,1秒後counter=QPS。
TPS:每秒鐘處理完的事務次數,通常TPS是對整個系統來說的。一個應用系統1s能完成多少事務處理,一個事務在分佈式處理中,可能會對應多個請求,對於衡量單個接口服務的處理能力,用QPS比較多。
併發量:系統能同時處理的請求數
RT:響應時間,處理一次請求所須要的平均處理時間
計算關係:
QPS = 併發量 / 平均響應時間
併發量 = QPS * 平均響應時間
對比:
測試場景:
對比locust的httpLocust庫、python2基礎庫httplib 和python3基礎庫http.client的效率和壓力
測試接口:經過GET獲取URL返回值
Slave機配置:單臺8核16G
Slave實例:10個
對比結果:httplocust庫RPS最大值4K,python2的最大值12K,python3的最大值15K
Jmeter的TPS最大值是34K