Locust壓測框架入門
- 2019 年 10 月 6 日
- 筆記
首先客套的來介紹一些Locust是啥:
Locust是一個容易使用、分散式的壓力測試工具。它是用於網站壓力測試(或其它系統)並找出多少用戶一個系統可以承載。
在測試過程中,策略就是一個Locust的蠕蟲將會攻擊你的網站。每一個locust的行為(或你使用的測試用戶)是你自己定義的,並且蠕蟲進程從一個網頁視圖中被實時監測。這樣會幫助你來實現測試,在真實用戶使用前定義系統的瓶頸。
Locust是完全基於事件的,因此可以在單台機器中支援數以千計的用戶在線。和其它基於事件的程式相比較,它是不需要使用回調的。相反,它通過gevent使用輕量級的進程。每一個locust測試你的網站時,實際上是真實的在內部運行它自己的進程(或greenlet,準確的說)。這樣就允許你不使用複雜的回調方法,而是使用Python編寫複雜的場景。
關於Locust:
1、locust作為一款性能測試工具,沒有單獨的ui介面,可以說是python下的一些庫的集成
locust完全基於python作為程式語言,採用pure python描述測試腳本,其中的http請求也是完全基於Requests庫,除了HTTP/HTTPS協議,locust也可以測其他協議的系統,只需要採用python調用對應的庫進行請求描述即可,可以說python對應的庫還是非常齊全的。
2、與jmeter相比較而言,locust更加的輕量化,採用的是不同於jmeter中進程和執行緒的處理機制(協程【微執行緒】),有效避免了系統的資源調度,由此可以大幅度的提高單擊系統的並發能力
3、Github地址:
https://github.com/locustio/locust
註:如果想查看python下依賴了哪些庫的話,可以進入github,點擊setup.py進入查看
上述標紅的地方就是依賴的第三方庫及支援版本(詳細的介紹見下方),安裝這些庫的時候也應遵循其顯示的版本號,如果與當前支援的版本號不一致或者小於當前版本號的時候就會安裝失敗。
4、locust組成模組(所依賴的庫)【gevent】是python下實現協程的一個第三方庫,能夠使系統獲取極高的並發性能(locust基礎模組)
簡而言之,它的特點就是協程,web管理工具,超級好用。
第一步,安裝
依然是老夥伴pip工具(完美安裝依賴)
pip install Locust

Locust有六個依賴的python模組
1.gevent:在Python中實現協程的第三方庫。協程又叫微執行緒Corouine。使用gevent可以獲取極高的並發能力;
2.flask:Python的一個web開發框架,和django相當;
3.requests:支援http/https訪問的庫;
4.msgpack-python:一種快速、緊湊的二進位序列化格式,使用與類似json的數據;
5.six:提供了一些簡單的工具封裝Python2和Python3 之間的差異;
6.pyzmq:安裝這個第三方庫,可以把Locust運行在多個進程或多個機器(分散式)
安裝結束了之後我們就開啟Locust之旅了。
第二步,使用
如何快速的創建一個Locust Demo。
from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): "Locust任務集,定義每個lucost的行為" @task(1) # 任務的權重為1,如果有多個任務,可以將權重值定義成不同的值, def get_root(self): "模擬發送數據" response = self.client.get('/Hello', name='get_root') if not response.ok: print(response.text) response.failure('Got wrong response') class TestLocust(HttpLocust): """自定義Locust類,可以設置Locust的參數。""" task_set = UserBehavior host = "https://www.baidu.com" # 被測伺服器地址 min_wait = 5000 # 最小等待時間,即至少等待多少秒後Locust選擇執行一個任務。 max_wait = 9000 # 最大等待時間,即至多等待多少秒後Locust選擇執行一個任務。首先需要導入locust模組裡面的三個方法,HttpLocust,TaskSet,task
1、創建一個類繼承自TaskSet,表示在這個類裡面都是Locust的任務,這個類就算Loucst的任務集:
2、創建任務,創建任務其實就算定義一個方法,需要注意的是,這個方法上面多了一個task的裝飾器,這個裝飾器是用來標是定義的這個方法會被locust識別成它需要做的任務,task裝飾器後面會有參數,如果執行單任務的時候,後面這個權重隨便寫上什麼數字都無所謂,這個數字其實就是一個權重值,但是如果有多個任務的情況下,這個時候權重值就會起作用了。
來吃個栗子:
@task(1) def index1(self): r=self.client.get('/test/index.html') print(r.text) @task(2) def search1(self): r=self.client.get('/test/search.html') print(r.text)如有index1和search2分別設置權重1、2,如果測試時指定9個模擬用戶數,那麼會有3個模擬用戶數執行index1任務,有6個模擬用戶數執行search2任務。
簡而言之可以把這個權重理解為執行次數的多少,數值越大,執行的頻率就越高。
3、進入測試階段,需要創建測試類繼承自HttpLocust。
在這個類中只需要將剛剛創建的任務集類實例化,並且提供一個伺服器的地址就可以進行使用了。
這裡還有兩個設置參數介紹一下:
min_wait : 最小等待時間,即至少等待多少秒後Locust選擇執行一個任務。
max_wait :最大等待時間,即最多等待多少秒後Locust選擇執行一個任務。
編寫完demo後,我們就可以運行程式碼了。
運行的時候並不是直接運行,需要在終端鍵入這樣的指令:
locust - f locu.py --logfile = locustfile.log
其中locu.py就是你剛剛編寫的demo文件,--logfile就是log日誌生成的地方。
我們運行一下程式碼:

之後就可以打開locust了
在瀏覽器中輸入地址:
http://localhost:8089/
你會看到這樣的頁面

輸入兩組數據,第一個是你需要訪問的最大總數,第二個是你在同一時間訪問的最大數量(並發)

輸入完之後就進入測試了:


我們看圖介紹一下數據:
Type 訪問類型 Name 任務名(python中定義的方法名) Requests 請求的總次數 Fails 失敗的次數 Median (ms) 中間數耗時 Average (ms) 平均耗時 Min (ms) 最低耗時 Max (ms) 最大耗時 Average size (bytes) 平均耗時 Current RPS 每秒鐘處理的訪問的次數
這就是locust最基本的使用方法和用途了!