1. 程式人生 > 其它 >python的自帶效能壓測工具locust

python的自帶效能壓測工具locust

Locust 的 特徵

  • 用 Python 編寫測試方案

    • 不需要在 UI 介面上傻乎乎的點選,只需正常的寫寫程式碼就可以了。
    • Locust 基於協程而不是回撥,這樣會讓您的程式碼類似於正常的 Python 阻塞程式碼那樣同步執行。
  • 分散式 & 可擴充套件

    • 支援模擬數十萬的使用者行為(還是非常給力的)
    • Locust 支援分佈在多臺計算機上的執行負載測試(可以多臺機器並行開搞)。
    • 由於基於事件,因此即使一個蝗蟲節點也可以在單個過程中處理數千個使用者。
    • 不過即使您模擬了這麼多使用者,也並非所有人都是這種頻率的使用您的系統,通常,使用者會有思考的時候,會想一想下一步該怎麼做。
      • 需要明白每秒請求數 不等於 線上使用者數
  • 統計結果基於 Web 介面

    • Locust 有一個簡單的使用者介面,可實時顯示相關的測試詳細資訊。
    • 統計結果介面是基於網頁的,而網頁是天生跨平臺的,所以 Locust 是跨平臺且易於擴充套件的(Locust 作者的這種思維還是很不錯的)。
  • 可以測試任何網頁 / 應用 / 系統

    • 即使 Locust 是面向 Web 的,它也可以測試幾乎所有專案
    • 只需用 python 編寫想要測試的方案,然後放"蝗蟲"去懟需要測試的專案就可以了,非常簡單!
      • 雖然官方是這麼宣傳的,但是如果你對 python 瞭解的不怎麼樣,那可能就沒有那麼簡單啊;就像商家把蘭博基尼的操作宣傳的再簡單,我沒錢買也是白搭(老鐵,我太難了!)
      • 如果你對程式設計是懵逼的狀態,那還是回去用 jmeter 吧,優雅不優雅的先不說,最起碼你可以用它來幹活;
  • 容易被入侵

    • Locust 放出去的蝗蟲很小,很容易被入侵,開發團隊是一隻打算保持這種狀態的。
    • 事件 I/O 和協程的所有繁重工作都委託給 gevent
    • 團隊是看到 jmeter 等其它測試工具,處理的太 low,太死板了,所以才寫的 locust;

Locust 是完全基於 Python

http 請求完全是基於 requests 庫;

Locust 支援 http、https 協議,還支援測試其他協議,websocket 等;

只要採用 Python 呼叫對應的庫就可以了。

  • http/https 採用 requests;
  • websocket 採用 websocket ;

一,locust的安裝

直接使pip命令安裝即可:

 pip install locust

二,簡單的案列

#引用時需要注意版本號,如果是新版本的2.5版本,引入的是HttpUser庫
from locust import HttpUser, TaskSet, task
import json
#定義一個類,該類繼承於TaskSet
class Demo(TaskSet):
    #修飾符表示任務權重
    @task(1)
    def SBC_test(self):
        url = '測試介面path'
        header = {"Host": 'viapi.sbc-proxy.viapi.aliyuncs.com', "X-Ca-Request-Id": "12",
                  "Content-Type": "application/json",
                  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
                  }
        data = {"url": "地址"}
        data_json = json.dumps(data)
        #需要使用locust自帶的client,如果使用requests庫的請求方式的話,執行報告的時候沒資料
        res = self.client.post(url=url, headers=header, data=data_json)
        print(res.json())
        if res.status_code == 200:
            print('success')
        else:
            print('fail:{}'.format(res.status_code))
class websitUser(HttpUser):
    #tasks指向定義了使用者行為的類
    tasks= [Demo]
    #最小和最大等待時間
    min_wait = 1000
    max_wait = 5000

三,啟動locust

如果Locust檔案位於子目錄下且名稱不是locustfile.py,可以使用-f命令啟動上面的示例locust檔案:

#-f後面跟的是需要啟動的檔案路徑
locust -f SBC_load.py

啟動成功後,控制檯出現下面的提示:

[2021-12-01 11:25:28,178] L-PC1DNYKA-1053/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from a
ll network interfaces)
[2021-12-01 11:25:28,189] L-PC1DNYKA-1053/INFO/locust.main: Starting Locust 2.5.0

PS:8089是該服務啟動的埠號,如果是本地啟動,可以直接在瀏覽器輸入http://localhost:8089開啟UI介面,如果是其他機器搭建locust服務,則輸入該機器的IP+埠即可;

四,locust的UI介面:

1,locust的啟動介面

Number of users to simulate:設定模擬的使用者總數

Hatch rate (users spawned/second):每秒啟動的虛擬使用者數
Host :需要壓測的網址,壓介面時可以不用填寫

Start swarming:執行locust指令碼

2,locust的測試頁面

PS:點選STOP可以停止locust指令碼執行:

Type:請求型別,即介面的請求方法;

Name:請求路徑;

requests:當前已完成的請求數量;

fails:當前失敗的數量;

Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位為毫秒;

Average:平均響應時間,單位為毫秒;

Min:最小響應時間,單位為毫秒;

Max:最大響應時間,單位為毫秒;

Content Size:所有請求的資料量,單位為位元組;

reqs/sec:每秒鐘處理請求的數量,即QPS;

3、各模組說明

New test:點選該按鈕可對模擬的總虛擬使用者數和每秒啟動的虛擬使用者數進行編輯;

Statistics:類似於jmeter中Listen的聚合報告;

Charts:測試結果變化趨勢的曲線展示圖,分別為每秒完成的請求數(RPS)、響應時間、不同時間的虛擬使用者數;

Failures:失敗請求的展示介面;

Exceptions:異常請求的展示介面;

Download Data:測試資料下載模組, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;