參考:
官方:https://docs.locust.io/en/latest/what-is-locust.html
https://www.cnblogs.com/imyalost/p/9758189.html
https://www.cnblogs.com/shmily2018/p/12498792.html
一、環(huán)境
pip install locust
pip install pyzmq
二、demo.py
from locust import HttpUser, TaskSet,task
class TaskDemo(TaskSet):
@task
# @task是執(zhí)行的任務(wù),一般單接口
def getList(self):
self.client.get("/list")
class WebsitUser(HttpUser):
tasks = [TaskDemo]
min_wait = 3000
max_wait = 5000
運行腳本:
locust -f locustfile.py --host=http://10.209.139.164
三、加上參數(shù)化、斷言完整腳本
from locust import HttpLocust,HttpUser, TaskSet,task
import queue
def file_to_list(filename):
'''
處理參數(shù)化文件,到list中
:param filename:
:return:
'''
data = []
with open(filename,'r',encoding='UTF-8') as f:
for line in f:
data.append(line.strip('\n').split(',')[0])
return data
class TaskDemo(TaskSet):
@task
def getMlist(self):
# 取出隊列中的數(shù)據(jù)
data = self.user.user_data_queue.get()
# 斷言需要在請求中把catch_response 設(shè)置為True
with self.client.get(data['params'],catch_response = True) as response:
if '"errno":0' in response.text:
response.success()
else:
response.failure('Failed')
class WebsitUser(HttpUser):
tasks = [TaskDemo]
# 實例化queue對象
user_data_queue = queue.Queue()
file = 'E:\\project\\tempScript\\match_log\\data\\deal_log.txt'
params_list = file_to_list(file)
for params in params_list:
data = {
"params": "%s" % params
}
# 放入隊列中
user_data_queue.put_nowait(data)
min_wait = 3000
max_wait = 5000
無ui命令:
locust -f locustfile.py --host=http://10.209.139.164 -u 2 -r 2 -t 50 --headless --csv ldtest --logfile test.log -L debug &
-u:總并發(fā)數(shù)
-r:每秒并發(fā)數(shù)
-t:運行時長
--headless:無界面模式,和-u,-r,-t一起使用
-csv:csv數(shù)據(jù)存儲文件名前綴
--logfile:日志文件
-L:日志等級,默認info
問題記錄:
1、本地有ui界面跑是OK的,但是容器部署后報錯OSError: [Errno 97] Address family not supported by protocol
解決方式參考:https://testerhome.com/topics/18332
最終命令為:locust -f locustfile.py --host=http://10.209.139.164 --web-host=0.0.0.0
擴展:
待實現(xiàn):https://testerhome.com/topics/24873