1、安裝:
終端輸入:pip install locust 安裝,安裝后locust --version查看當前Locust版本
終端輸入: locust --help 顯示幫助信息
locust官網: https://www.locust.io/
官網幫助文檔: https://docs.locust.io/en/latest/installation.html
大並發量測試時,建議在linux系統下進行;
2、python編寫性能測試腳本
locust通過client屬性來使用Python requests庫的所有方法,調用方式與reqeusts一樣(源碼中變量client賦值了HttpSession類,而HttpSession繼承自requests.Session,故client可以使用requests庫中的所有方法,感興趣的可以看下源碼)。
以訪問博客園為例,編寫實例腳本如下:
from locust import HttpLocust, TaskSet, task # 定義用戶行為 class UserBehavior(TaskSet): def on_start(self): print("start") @task(1) def bky_index(self): self.client.get("/") @task(2) def blogs(self): self.client.get("/Clairewang/p/8622280.html") class WebsiteUser(HttpLocust): host = "https://www.cnblogs.com" task_set = UserBehavior min_wait = 1500 max_wait = 5000
UserBehavior類繼承TaskSet類,用於描述用戶行為:
- 使用@task裝飾的方法為一個事務,方法的參數用於指定該行為的執行權重,參數越大每次被用戶執行的概率越高,默認為1(事務blogs()被執行的概率是bky_index()的2倍);
- on_start():每個locust用戶執行測試事務之前執行一次,用於做初始化的工作,如登錄;
WebsiteUser類用於設置性能測試屬性:
- host :要加載主機的URL前綴(即“https://www.cnblogs.com”),通常是在命令行啟動locust時使用--host選項指定,若命令行啟動時未指定,該屬性被使用;
- task_set:指向定義的一個用戶行為類;
- min_wait:模擬用戶在執行每個任務之間等待的最小時間,單位為毫秒;
- max_wait:模擬用戶在執行每個任務之間等待的最大時間,單位為毫秒(min_wait和max_wait默認值為1000,因此,如果沒有聲明min_wait和max_wait,則locust將在每個任務之間始終等待1秒。);
- weight:一個文件中有多個locust用戶類時,指定用戶類的權重(默認新增locust用戶時會隨機選擇一個用戶類);
class WebUserLocust(Locust): weight = 3 ... class MobileUserLocust(Locust): weight = 1 ...
WebUserLocus用戶執行的概率是MobileUserLocust用戶的三倍。
實例中只用了get方式請求,post方式請求操刀實例如下:
class JingClue(TaskSet): def on_start(self): self.login() self.header = { "Authorization": self.token } def login(self): username = '18200389565' password = '123456' with self.client.post('/security/log/login', {'username': username, "password": password}) as response: if response.status_code == 200: self.token = "Bearer " + response.json()["data"]["token"] @task def publicoceanclues(self): url = '/DataService/publicOcean/getPublicOceanClues' data = { "pageSize": 20, "pageIndex": 1, "sortField": "discardTime", "sortType": -1 } self.client.post(url, json=data, headers=self.header)
3、啟動:
終端進入代碼目錄,輸入 locust -f bokeyuan.py --host=https://www.cnblogs.com
- -f :指定要運行的測試腳本文件;
- -host :要加載主機的URL前綴,不指定時,讀取WebsiteUser類中定義的host;
- --master:單台機器不能模擬更多用戶時,分布式模式,通過--master指定主進程;
4、打開Locust的web界面
使用上面的命令行啟動Locust之后,應該打開瀏覽器並將其指向http://127.0.0.1:8089(如果您在本地運行Locust)。
- Number of users to simulate :設置模擬用戶數;
- Hatch rate(users spawned/second) :每秒產生(啟動)的虛擬用戶數;
設置好模擬用戶后,點擊Start swarming開始測試,測試結果如下:
- Type :請求的類型,如GET/POST;
- Name :請求的路徑;
- request :已發出請求數量;
- fails :請求失敗的數量;
- Median :響應時間的中間值(單位:毫秒);
- Average :平均響應時間(單位:毫秒);
- Min :請求的最小響應時間(單位:毫秒);
- Max :請求的最大響應時間(單位:毫秒);
- Content Size:單個請求的大小(單位:字節);
- reqs/sec:每秒鍾請求的個數;
今日先更到這里吧,斷點、使用隊列參數化、分布式測試等后續空了再繼續更。
加微信交流或打賞鼓勵:
交流QQ:1271782085