Locust性能測試


作者: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/")

這個腳本將按照順序模仿以下行為:

  1. 請求Host的 / 路徑兩次
  2. 請求Host的 /docs/ 路徑一次
  3. 每次執行任務之間,間隔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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM