locust性能測試實戰


locust性能測試實戰

1、在Linux上面部署好locust工具 
1)安裝python3.6.9版本
先安裝OpenSSL
# yum -y install openssl*
解壓安裝包
# tar -xf Python-3.6.9.tar.xz
# cd Python-3.6.9/
# ./configure --prefix=/usr/local/python3 --with-ssl
# make && make install
建立軟連接
# ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
# ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
升級pip工具
# pip3 install --upgrade pip
2)安裝locust工具
使用如下命令進行安裝:
檢查是否安裝成功:看到有幫助信息,說明安裝成功了
# locust --help
 
如果沒有上面的信息,可以自己配置環境變量,
如下:配置環境變量,找到locust安裝目錄 # vim /etc/profile export PATH=$PATH:/usr/local/python3/bin/ # source /etc/profile 查看有沒有生效: # locust -h
 
2、在windows上面安裝好locust工具 
首先確保自己安裝了python3.0以上版本
在dos窗口中,使用命令:
使用locust -h查看是否安裝成功
 
3、在pycharm里面開發(get,post)請求 
在pycharm中創建get請求的文件locust_get.py,文件內容如下:
from locust import TaskSet,task,HttpLocust
class LocustApi(TaskSet):
@task()
def get_types(self):
respose = self.client.get("/mobile/api/goods/gettypes")
result = respose.json()
# 斷言
#assert result['code'] ==0
if result['code']==0:
print('Pass_get')
else:
print('Fail_get')
class WebsiteUser(HttpLocust):
task_set = LocustApi
min_wait = 3000 # 模擬負載的任務之間執行時的最小等待時間,單位為毫秒
max_wait = 6000 # 模擬負載的任務之間執行時的最大等待時間,單位為毫秒
#stop_timeout = 60000
if __name__ == "__main__":
import os
os.system("locust -f locust_get.py --host= http://192.168.69.130:8080")
運行結果為:
在瀏覽器中查看執行結果: http://localhost:8089/
在pycharm中創建get請求的文件locust_post.py,文件內容如下:
import json
import random
from locust import TaskSet,task,HttpLocust
class ApiLogin(TaskSet):
# 登錄
@task()
def login(self):
headers = {'content-type':'application/json'}
params = {'mobile':'18262989777','password':'123456'}
data = json.dumps(eval(str(params)))
data = data.encode('utf-8')
self.client.post('/mobile/api/user/login',data,headers=headers)
class WebsiteUser(HttpLocust):
task_set = ApiLogin
min_wait = 3000 # 模擬負載的任務之間執行時的最小等待時間,單位為毫秒
max_wait = 6000 # 模擬負載的任務之間執行時的最大等待時間,單位為毫秒
stop_timeout = 300 # 設置多少秒停止,是這個場景要跑多長的時間,如果不設置這個字段,腳本會一直運行
if __name__=="__main__":
import os
# 啟動locust
os.system("locust -f locust_post.py --host=host")
在pycharm中運行腳本,如圖所示:
在瀏覽器中查看執行結果: http://localhost:8089/
 
4、跑性能測試場景,並熟悉每個參數的含義 
#!/usr/bin/env python
#-*-coding:utf-8-*-
#@Time:2019/7/25 14:48
#@Author:xiaoxian
#@File: api_get_post.py
from locust import TaskSet, HttpLocust, task
import json
import random
class LocustApi(TaskSet):
# 獲取商品列表
@task(1)
def get_types(self):
response = self.client.get("/mobile/api/goods/gettypes")
result = response.json()
# 斷言
# assert result['code'] == 0
if result['code'] == 0:
print('Pass_get')
else:
print('Fail_get')
@task(2)
def login(self):
with open("D:\\python\\locust\\mobile.txt") as f:
mobile_id = f.readlines()
mobile_ids = []
# readlines獲取每一行數據保存為list,每一行數據是一個元素,字符串形式,
# 這里要遍歷轉為int可以去掉換行符號再append一個新數組。
for i in mobile_id:
data = int(i)
mobile_ids.append(data)
ran = random.randint(0, 5)
# 隨機取出一個數據
mobile_id = mobile_ids[ran]
mobile = str(mobile_id)
headers = {'content-type': 'application/json'}
params = {"mobile": mobile, "password": "123456"}
data = json.dumps(eval(str(params)))
data = data.encode('utf-8')
response = self.client.post("/mobile/api/user/login", data, headers=headers)
result = response.json()
# 斷言
# assert result['code'] == 0
if result['code'] == 0:
print('Pass_post')
else:
print('Fail_post')
class WebsiteUser(HttpLocust):
task_set = LocustApi
min_wait = 3000 # 單位毫秒
max_wait = 6000 # 單位毫秒
if __name__ == "__main__":
import os
# 啟動locust,
os.system("locust -f api_get_post.py --host=host")
 
5、locust設置斷言
# 斷言
第一種方法:
assert result['code'] ==0
第二種方法:
if result['code']==0:
print('Pass_get')
else:
print('Fail_get')
 
6、locust參數化 
# readline獲取每一行數據保存在list,每一行數據是一個元素,字符串形式,
#這里變量轉為int 可以去掉換行符號在append一個新數據
with open("D:\\python\\locust\\mobile.txt") as f:
mobile_id = f.readline()
mobile_ids = []
for i in mobile_id:
data = int(i)
mobile_ids.append(data)
ran = random.randint(0,5)
# 隨機取出一個數據
mobile_id = mobile_ids[ran]
mobile = str(mobile_id)
7、locust混合場景執行
 # 裝飾該方法表示為用戶行為,括號里面參數表示該行為的執行權重,數值越大,執行頻率越高,默認是1 
@task(1)
 def get_types(self):
……
@task(2)
 def login(self):
……
備注:具體腳本內容查看標題4的內容
在瀏覽器中查看執行結果: http://localhost:8089/
 
8、locust分布式運行 
實現分布式壓測,需要在主機中使用--master標記來啟用一個locust示例,但是master節點的機器不會發起請求,只會收集數據展示,在從機使用--save標記啟動一條到多台locust salve機器節點,與標記----master-host一起使用(指出master機器的ip/hostname)
主機啟動:
locust -f locust_get.py --master WebsiteUser
啟動從機:
os.system("locust -f locust_get.py --slave --master-host=192.168.69.130 --host= http://192.168.69.130:8080" )
注意:兩個腳本要一致
 
9、命令行運行
locust啟動命令
locust -f locust_get.py --host= http://192.168.69.130:8080
-f 指定性能測試腳本文件
--host指定被測試應用的URL的地址
no-web 模式運行測試
locust -f locust_get.py --host= http://192.168.69.130:8080 --no-web -c 10 -r 2 -t 1m
啟動參數:
--no-web:表示不使用web界面運行測試
-c:表示設置虛擬用戶數
-r:設置每秒啟動虛擬用戶數
-t:設置運行時間
 
10、locust的UI界面
1)啟動界面
Number of users to simulate:設置模擬的用戶總數Hatch rate (users spawned/second):每秒啟動的虛擬用戶數
Start swarming:執行locust腳本
 
2)測試結果界面
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;
 
 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM