目錄
- 一、簡介
- 二、安裝
- 三、locust的庫和方法介紹
- 1、from locust import task
- 2、from locust import TaskSet
- 3、from locust import HttpUser
- 四、實戰(zhàn)代碼V1.0(入門代碼)
- 1、代碼如下
- 2、進入代碼的目錄,執(zhí)行如下命令
- 3、打開瀏覽器,輸入http://localhost:8089/
- 4、參數(shù)講解
- 五、實戰(zhàn)代碼V1.1(入門代碼)
- 1、任務集類中的on_start方法
- 2、任務集類中的on_start方法
- 六、實戰(zhàn)代碼V1.2(入門代碼)
- 1、如何判斷請求是失敗還是成功
- 2、然后再響應的消息中指定判斷邏輯即可,success即為成功,failure即為失敗
- 七、實戰(zhàn)代碼V1.3(全量代碼)
- 八、常見問題
- 1、cookies
- 2、多統(tǒng)計api的問題
- 九、分布式調(diào)用的問題
今年負責部門的人員培養(yǎng)工作,最近在部門內(nèi)部分享和講解了locust這個工具,今天再博客園記錄下培訓細節(jié)。相信你看完博客,一定可以上手locust這個性能測試框架了。
一、簡介
1、優(yōu)勢
locust是python語言開發(fā)的一款的開源的的性能測試框架,他比jmeter更加的輕量級,主要是通過協(xié)程(gevent)的方式去實現(xiàn)并發(fā),通過協(xié)程的方式可以大幅提高單機的并發(fā)能力,同時避免系統(tǒng)級的資源調(diào)度。locust具有開源性、分布式、支持高并發(fā),支持webUI的操作方式。
2、劣勢
locust的圖表功能較弱,只展示了很少的數(shù)據(jù)
locust不支持監(jiān)控服務端的狀態(tài),需要借助第三方工具,或者自己寫代碼去實現(xiàn)
二、安裝
locust的安裝非常簡單,直接通過pip的方式就可以安裝
三、locust的庫和方法介紹
1、from locust import task
通過task可以把某個函數(shù)指定為任務,直接@task裝飾對應的函數(shù)即可,在@tast(n)中可以有一個參數(shù)n,意思是這個任務的占比是多少
2、from locust import TaskSet
需要定義一個類,繼承TaskSet這個類,這個是是一個任務集的概念,這個類中可以包括多個task
3、from locust import HttpUser
需要定義一個類,這個類要繼承HttpUser,通過這個定義的類我們可以執(zhí)行具體的任務集
看了上面的介紹,可能大家有點云里霧里的,下面我們由淺入深看代碼
四、實戰(zhàn)代碼V1.0(入門代碼)
1、代碼如下
from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet
#指定一個任務集
class My_task_set(TaskSet):
#這是某個任務,30是比例,比如這里是30/50
@task(30)
def getindex1(self):
# client就是個requests對象
# catch_response,告訴locust如何判斷請求失敗還是成功
res = self.client.get("/bainianminguo/p/10952586.html")
@task(20)
def getindex2(self):
# client就是個requests對象
res = self.client.get("/bainianminguo/p/7253930.html")
class WebSite(HttpUser):
# 指定要執(zhí)行哪個任務集
tasks = [My_task_set,]
# 請求和請求之間最小的間隔時間
min_wait = 1000
# 請求和請求之間最大的間隔時間
max_waif = 2000
2、進入代碼的目錄,執(zhí)行如下命令

3、打開瀏覽器,輸入http://localhost:8089/

4、參數(shù)講解
Number of total users to simulate 模擬的總的用戶數(shù)
Spawn rate 每秒鐘新增的用戶數(shù)
五、實戰(zhàn)代碼V1.1(入門代碼)
1、任務集類中的on_start方法
class My_task_set(TaskSet):
#添加初始化方法
def on_start(self):
print("類似類中的構(gòu)造方法,每個用戶在任務開始前,只執(zhí)行一次,在這里可以定義一個對象的屬性,這樣其它測試集就可以使用這個屬性")
這個方法類似pytest框架中的前置條件或者說是面向?qū)ο笾械臉?gòu)造方法
2、任務集類中的on_start方法
def on_stop(self):
print("類似類中的后置方法,每個用戶在任務開始后,只執(zhí)行一次,在這里可以定義一個對象的屬性,這樣其它測試集就可以使用這個屬性")
六、實戰(zhàn)代碼V1.2(入門代碼)
1、如何判斷請求是失敗還是成功

2、然后再響應的消息中指定判斷邏輯即可,success即為成功,failure即為失敗

七、實戰(zhàn)代碼V1.3(全量代碼)
from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet
# locust中的client會自動幫我們處理cookies。類似request.session(),所以如果我們登陸的時候,只需要在on_start中登陸一次就可以了
# 如果在locust中,如果url是不需要統(tǒng)計,則我們不要用clent去訪問api,應該用request去訪問,這樣就locust就不會統(tǒng)計request庫發(fā)起的請請求
#指定一個任務集
class My_task_set(TaskSet):
#添加初始化方法
def on_start(self):
print("類似類中的構(gòu)造方法,每個用戶在任務開始前,只執(zhí)行一次,在這里可以定義一個對象的屬性,這樣其它測試集就可以使用這個屬性")
def on_stop(self):
print("類似類中的后置方法,每個用戶在任務開始后,只執(zhí)行一次,在這里可以定義一個對象的屬性,這樣其它測試集就可以使用這個屬性")
#這是某個任務,30是比例,比如這里是30/50
@task(30)
def getindex1(self):
# client就是個requests對象
# catch_response,告訴locust如何判斷請求失敗還是成功
res = self.client.get("/bainianminguo/p/10952586.html",catch_response=True)
if res.code == 200:
res.success()
else:
res.failure("ff")
print(res)
@task(20)
def getindex2(self):
# client就是個requests對象
res = self.client.get("/bainianminguo/p/7253930.html")
print(res)
class WebSite(HttpUser):
# 指定要執(zhí)行哪個任務集
# task_set = My_task_set
tasks = [My_task_set,]
# 請求和請求之間最小的間隔時間
min_wait = 1000
# 請求和請求之間最大的間隔時間
max_waif = 2000
# Number of total users to simulate 模擬的用戶數(shù)
# Spawn rate 每秒鐘產(chǎn)生的用戶數(shù)
八、常見問題
1、cookies
locust中的client會自動幫我們處理cookies。類似request.session(),所以如果我們登陸的時候,只需要在on_start中登陸一次就可以了
2、多統(tǒng)計api的問題
如果在locust中,如果url是不需要統(tǒng)計,則我們不要用clent去訪問api,應該用request去訪問,這樣就locust就不會統(tǒng)計request庫發(fā)起的請請求
九、分布式調(diào)用的問題
一旦單臺機器不夠模擬足夠多的用戶時,Locust支持運行在多臺機器中進行壓力測試。
為了實現(xiàn)這個,你應該在 master 模式中使用--master標記來啟用一個 Locust 實例。這個實例將會運行你啟動測試的 Locust 交互網(wǎng)站并查看實時統(tǒng)計數(shù)據(jù)。br>master 節(jié)點的機器自身不會模擬任何用戶。相反,你必須使用 --slave 標記啟動一臺到多臺 Locustslave 機器節(jié)點,與標記 --master-host 一起使用(指出master機器的IP/hostname)。
常用的做法是在一臺獨立的機器中運行master,在slave機器中每個處理器內(nèi)核運行一個slave實例。
注意:master 和每一臺 slave 機器,在運行分布式測試時都必須要有 locust 的測試文件。
在 master 模式下啟動 Locust:
locust -f my_loucstfile.py --master
在每個 slave 中執(zhí)行(192.168.0.14 替換為你 msater 的IP):
locust -f my_locustfile.py --slave --master-host=192.168.0.14

以上就是Python locust工具使用詳解的詳細內(nèi)容,更多關于Python locust工具的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- python性能測試工具locust的使用
- Python性能測試工具Locust安裝及使用
- 基于python locust庫實現(xiàn)性能測試
- Python 3.6 性能測試框架Locust安裝及使用方法(詳解)