locust效能測試01—初體驗
前言
前段時間準備做效能測試,選擇了jmeter,但是python中的效能測試工具locust我也想嘗試一下。不過當我入手的時候,想找一個簡易教程,在網上找來找去,大多數的locust教程都是基於0.X版本的,適用於最新的1.X版本寥寥無幾,為此我花了好幾天的時間翻看官方文件,終於是通過locust完成了效能測試。
寫下這些部落格,不存在說這是一個教學部落格,只是自己做一個記錄,也希望對別人起到參考的作用,也請不要做伸手黨,上來就要原始碼什麼的。畢竟精力實在有限,部落格也不是為了盈利。
開篇
什麼是蝗蟲?
Locust是易於使用,可編寫指令碼且可擴充套件的效能測試工具。
您可以使用常規Python程式碼定義使用者的行為,而不是使用笨拙的UI或特定於域的語言。
這使得Locust可以無限擴充套件,並且對開發人員非常友好。
特徵
-
用普通的Python編寫使用者測試方案
-
分散式和可擴充套件-支援數十萬使用者
-
基於Web的UI
-
可以測試任何系統
-
二次開發
1.X版本到0.1版本最顯著的變化
-
Locust類重新命名為User
Locust
和HttpLocust
類重新命名為User
和HttpUser
-
可以直接在
User
類下面宣告@task -
添加了@tag標記符,用來在執行期間包括/排除任務
安裝Locust
使用pip安裝locust
使用python3.6~3.8版本
pip install locust
示例指令碼
編寫一個檔案,名稱為demo.py
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from locust import HttpUser, task, between class DemoTest(HttpUser): host = 'https://www.baidu.com' wait_time = between(1, 2) def on_start(self): self.client.get('/') @task def search_locust(self): self.client.get('/s?ie=utf-8&wd=locust')
- 首先我們匯入locust的HttpUser類,這個類所代表的就是一個使用者。
- host用以指定本次測試的網址。本次我選擇的是百度首頁
- task這個可以宣告一個方法為一個蝗蟲任務。
- between方法可以使使用者在任務之間停留1—2秒
- 然後我們在類裡面寫了一個on_start方法,這個方法可以讓每一個蝗蟲使用者在執行時,在這個方法下面的內容只執行一次,我們可以把常見的比如登入或者從資料庫讀取資料的方法等初始化方法放在這個裡面。
- 被@task裝飾的search_locust方法就是我們的蝗蟲任務了。在百度中搜索locust。
- self.client類變數,例項化了locust中HttpSession的類,而此類繼承了requests庫的方法,並在requests的基礎上添加了locust特有的一些功能。所以我們可以直接的用requests的一些方法來進行請求,如get等
好了我們執行一下:
執行方法
-
直接在demo.py檔案的同目錄下輸入locust命令
D:\VScode\locust-demo>locust [2020-10-11 14:17:42,341] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info. [2020-10-11 14:17:42,342] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089 [2020-10-11 14:17:42,371] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1
-
輸入locust命令的同時-f引數指定檔案路徑
D:\VScode>locust -f locust-demo\demo.py [2020-10-11 14:19:01,687] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info. [2020-10-11 14:19:01,689] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089 [2020-10-11 14:19:01,699] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1
可以看到成功運行了,接著我們開啟瀏覽器在位址列輸入http://localhost:8089/
可以看到,locust已經啟動了。
第一個輸入框的意思是:總共執行的使用者數
第二個資料框的意思是每秒啟動的使用者數
第三個資料框就是本次測試的測試地址,我們已經在DemoTest
中指定了host類變數,所以這裡我們不用輸入就直接能夠填充這個地址,如果沒有指定host變數的話,這裡就需要輸入這個地址了。
我們的輸入100個使用者每秒啟動10個開始一下測試。
報告詳解
- 統計圖表
可以看到上面顯示了本次效能測試的詳細內容。從左到右依次是:
請求型別 | 請求名稱 | 請求數量 | 失敗數量 | 中位數RT | 90%使用者在RT內 | 平均RT | 最小RT | 最大RT | 平均大小(位元組) | 當前RPS | 每秒失敗數
RT: 響應時間
RPS : 每秒的事務處理數
可以看到在請求名為/
的資料表中請求次數只有100次,因為我們把它放在了on_start
裡面,所以遵循每個使用者只有1次,我們設定了100個使用者。
而第二個請求則沒有限制。
我們接著來看第二項:
- TPS曲線圖
-
response響應時間圖
-
使用者數
後面三項比較簡單。分別是錯誤的請求,錯誤的內容,下載統計資料的csv。這裡就不在過多的介紹了,自己體驗吧。
通過python寫效能測試的指令碼還是挺好的,方便又直接。locust還是值得體驗的,特別是它的單機併發量相比jmeter非常高。
網上找了一篇對比的文章: https://www.cnblogs.com/huojinfeng/articles/10592645.html
感覺說了挺多,又沒說多少,主要是上一天班,寫文章的精力也就寥寥無幾。開篇就先到這裡吧。
後續的文章將介紹檢查點,引數化,集合點等內容。