在Rainbond上使用Locust進行壓力測試
- 2022 年 1 月 18 日
- 筆記
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
Rainbond 是一個開源的雲原生應用管理平台,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes集群,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續交付、應用運維、應用級多雲管理等。
🌟 Github://github.com/goodrain/rainbond
😊 官網://www.rainbond.com?channel=cnblog
😉 微信群:請搜索微信公眾號 Rainbond 關注並添加群助手入技術交流群
🤔 釘釘群:請搜索釘釘群號 31096419


