壓測工具 Locust

一、認識Locust

定義

Locust是一款易於使用的分佈式負載測試工具,完全基於事件,即一個locust節點也可以在一個進程中支持數千併發用戶,不使用回調,通過gevent使用輕量級過程(即在自己的進程內運行)。

特點

①、不需要編寫笨重的UI或者臃腫的XML代碼,基於協程而不是回調,腳本編寫簡單易讀;
②、有一個基於we簡潔的HTML+JS的UI用戶界面,可以實時顯示相關的測試結果;
③、支持分佈式測試,用戶界面基於網絡,因此具有跨平臺且易於擴展的特點;
④、所有繁瑣的I / O和協同程序都被委託給gevent,替代其他工具的侷限性;

安裝

pip install locustio

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運行在多個進程或多個機器(分佈式)
    檢測安裝是否成功
(demo) root@ubuntu1804:/opt/other# locust --version
locust 2.5.0

二、使用

簡單使用

編寫測試腳本 locust_test.py

from locust import HttpUser, TaskSet, task

class UserBehavior(HttpUser):
    @task(1)
    def baidu_index(self):
        self.client.get("/")

WebsiteUser()類用於設置生成負載的基本屬性:
屬性 說明
task_set 指向定義了用戶行爲的類
min_wait 模擬負載的任務之間執行時的最小等待時間,單位爲毫秒
max_wait 模擬負載的任務之間執行時的最大等待時間,單位爲毫秒

UserBehavior()類用戶設置測試具體方法:
UserBehavior繼承HttpUser,擁有request等方法。
@task裝飾該方法表示爲用戶行爲,括號裏面參數表示該行爲的執行權重:數值越大,執行頻率越高,不設置默認是1;
baidu_index 是具體的測試方法,可以設置GET、POST請求,可以設置請求攜帶信息,可以設置請求的結果處理。

(demo) root@ubuntu1804:/opt/other# locust -f locust_test.py
/root/.virtualenvs/demo/lib/python3.8/site-packages/locust/util/deprecation.py:14: DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [UserBehavior])
  warnings.warn(
[2021-11-29 11:36:29,324] ubuntu1804/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
[2021-11-29 11:36:29,356] ubuntu1804/INFO/locust.main: Starting Locust 2.5.0

UI界面

打開網頁:http://localhost:8089,進入UI界面。

UI界面的菜單
● Statistics:類似於jmeter中Listen的聚合報告;
● Charts:測試結果變化趨勢的曲線展示圖,分別爲每秒完成的請求數(RPS)、響應時間、不同時間的虛擬用戶數;
● Failures:失敗請求的展示界面;
● Exceptions:異常請求的展示界面;
● Download Data:測試數據下載模塊, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;

統計信息:

Type:請求類型,即接口的請求方法;
Name:請求路徑;
requests:當前已完成的請求數量;
fails:當前失敗的數量;
Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位爲毫秒;
Average:平均響應時間,單位爲毫秒;
Min:最小響應時間,單位爲毫秒;
Max:最大響應時間,單位爲毫秒;
Content Size:所有請求的數據量,單位爲字節;
reqs/sec:每秒鐘處理請求的數量,即QPS;

QPS圖信息

官方文檔:
https://docs.locust.io/en/stable/what-is-locust.html

三、進階使用

控制RPS
wait_time 是請求的間隔時間
用戶數 是開啓的協程數
RPS = 間隔 x 用戶數,要求的RPS可以根據這個公式調整。

class UserBehavior(HttpUser):
    wait_time = constant_throughput(0.5)

    @task(1)
    def get_ticket_user(self):
        url = "https://apiv3.shanbay.com/tickethub/ticket/user?code=2021-06-cet"
        cookies = {"auth_token": random.choice(token_list)}
        self.client.get(url, cookies=cookies)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章