Python(Locust對介面進行壓測)
阿新 • • 發佈:2022-05-08
python如何進行效能測試呢?其實原理就是對於介面進行加執行緒,打個比方就是當你有一個電梯,你同時可以搭載多少個人坐電梯那這個人數就是這部電梯的其中一個性能指標,那麼對於介面來說每秒鐘能有多少人成功發起請求後得到成功的響應就是效能測試的一個指標
接下來我們來看一下效能測試的幾個重點:
我們在做效能測試主要去看的就是以上四點:錯誤率,響應時間,tps和rps
當我們使用Python去構建自動化測試框架時,我們用Locust來對介面進行壓測,具體寫法如下:
首先我們需要在cmd中安裝locust,命令:pip install locust
安裝好後我們可以通過命令:locust --version檢視其安裝的版本
接下來我們看程式碼中具體如何實現對於locust的使用:
from locust import HttpUser
from locust import task import os
#我們在做介面自動化測試時,使用的是request對介面發起請求,在這裡我們用的是locust中的httpuser對介面進行發起請求 class Opms(HttpUser): def on_start(self): print("我是一個使用者,我啟動了") def on_stop(self): print("我是一個使用者,我退出了")
#定義好的介面必須使用task裝飾器使其成為一個需要執行的任務,否則的話即使啟動了locust也不會將定義好的函式作為一個需要執行的任務 @taskdef login(self): url = "/login" with self.client.get(url=url, name="獲取登入頁", catch_response=True) as res:
#下面斷言,當我們返回的text中有專案管理則登入成功,反之失敗 if "專案管理" in res.text: res.success() else: res.failure("自定義失敗:獲取主頁失敗") @task def postLogin(self): url= "/login" data = { "username": "libai", "password": "opms123456" } with self.client.post(url, data=data, name="登入", catch_response=True) as res: if res.json()["code"] == 1: res.success() else: res.failure("自定義失敗:登陸失敗") if __name__ == '__main__': os.system("locust -f loginLocust.py --web-host=127.0.0.1")
右鍵啟動,或者直接在終端使用命令,
locust -f loginLocust.py --web-host=127.0.0.1
成功啟動後我們會在終端看到如圖所示:
複製url到瀏覽器開啟網頁
我們成功啟動了locust其中第一行Number of users 是使用者數(執行緒數),Spawn rate(幾秒內集合),Host(根URL)。
我們輸入50人 在2秒內嘗試壓測一下登入介面和登入頁面
啟動壓測中,這時候我們等待一段時間,當50個執行緒組全部加壓上去後過段時間我們看一下其效能表現,注意一定要等一段時間,因為在一開始執行緒組沒上去時產生的資料並沒啥用。
關注其中幾個重要的指標,Fails,90%ile,99%ile,以及RPS,通過分析,我們在壓測的過程中,產生的錯誤數<5%只有1%說明錯誤數是在可控制範圍內,再看響應速度,90%的人是2秒和1.3秒,99%的人是4.6秒和3.1秒,其實如果超過3秒已經有點慢了,但是也不是不可以接受,RPS是55.2。這個資料還可以接受說明遠沒有到效能瓶頸,接下來我們可以繼續加大執行緒數繼續壓測。
以上就是Python+locust進行的效能測試。