作者:Rainbond
鏈接:https://www.zhihu.com/question/19867883/answer/2315612238
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
Locust簡介
Locust 是一種易於使用、可編寫腳本且可擴展的性能測試工具。並且有一個用戶友好的 Web 界面,可以實時顯示測試進度。甚至可以在測試運行時更改負載。它也可以在沒有 UI 的情況下運行,使其易於用於 CI/CD 測試。
Locust 使運行分布在多台機器上的負載測試變得容易。Locust 基於事件(gevent),因此可以在一台計算機上支持數千個並發用戶。與許多其他基於事件的應用程序相比,它不使用回調。相反,它通過gevent使用輕量級進程。並發訪問站點的每個Locust(蝗蟲)實際上都在其自己的進程中運行(Greenlet)。這使用戶可以在Python中編寫非常有表現力的場景,而不必使用回調或其他機制。
快速部署Locust
Locust
應用已發布到 開源應用商店
,搜索 locust
安裝最新2.5.1
版本即可。

安裝完成后,您將會得到一個Locust主從集群,其中,master組件負責提供UI界面,和並發任務的調度;slave組件負責執行並發任務,slave組件同時支持橫向伸縮,當產生的測試並發達到一定的限額時,只需擴展 slave 組件實例即可,例如:

如何使用
Locust_Master
提供了一個基於WEB-UI的圖形化管理界面,首次登陸,會提示輸入一些信息:
❝ 默認用戶密碼:locust locust,可配置Locust_Master
組件的環境變量LOCUST_WEB_AUTH
進行修改。
❞

「Number of users」 填寫模擬的並發用戶數量,經過測試,單個slave實例可以輕松提供上千個用戶並發的壓力。
「Spawn rate」 填寫蝗蟲
的孵化率,即每秒產生多少用戶。
「Host」 填寫想要壓測的站點地址。
當Host以及用戶,並發量定義完畢以后,還需要去定義一下測試用例,即用戶訪問Host之后的行為,Locust是通過一個名為/locustfile.py
的Python腳本來定義用戶行為,在Rainbond平台的 Locust_Master
組件內 環境配置
-> 配置文件設置
進行編輯修改。

代碼示例如下:
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(5, 15)
@task(2)
def index(self):
self.client.get("/")
@task(1)
def about(self):
self.client.get("/docs/")
這個腳本將按照順序模仿以下行為:
- 請求Host的
/
路徑兩次 - 請求Host的
/docs/
路徑一次 - 每次執行任務之間,間隔5-15秒
之所以要這么設計的原因,是Locust的設計者們認為,真正的用戶行為,不會像腳本一樣接連不斷的執行完所有的請求然后退出。更多的情況是,用戶做完一件事后,會停頓一會,比如讀讀說明,思考下一步要干嘛。所以會在每個步驟之間留下一個隨機時長的空白期。這種假設實際上更符合用戶實際行為。
這個文件,將會以配置文件的方式掛載到 locust_master
組件上,並且共享掛載給所有的locust_slave
組件。這意味着,如果你想要更改這個文件的內容,只需要去編輯 locust_master
組件中,環境配置下所掛載的配置文件即可。然后更新整個 Locust 集群即可生效。
結果分析
借助Locust提供的WEB-UI界面,我們可以非常方便的分析壓力測試結果。

Statistics頁面,將向我們展示所有被壓測接口的匯總報告。結果包括:
「Type」 請求類型;
「Name」 請求路徑;
「Requests」 請求總數;
「Fails」 失敗次數;
「Median」 中位數響應時間;
「90%ile」 90%請求響應時間;
「Average」 平均響應時間;
「Min」 最小響應時間;
「Max」 最大響應時間;
「Average size」 請求的平均大小;
「Current PRS」 當前吞吐率;
「Current Failures」 當前錯誤率;

Charts頁面將主要結果繪制成為隨時間變化的圖表,能夠在趨勢上給予用戶指引。
除了這些之外,還有幾項值得關注的值會在最上面一排全局展示,包括當前請求的主機域名、當前產生的並發用戶數量、slave節點數量、當前所有請求接口的總吞吐率、錯誤率。以及停止測試的按鈕。
其它的幾個頁面會提供:
「Failures」 請求失敗的接口及失敗原因;
「Expections」 測試中意外的錯誤以及錯誤原因
「Download Data」 csv格式的測試數據下載地址
「Workers」 所有slave實例的信息
更多教程請參考Locust官方文檔
轉載自知乎用戶Rainbond