locust工具学习笔记-自定义负载策略
1、 LoadTestshape类
在实际测试场景中默认的每秒生成一定用户数的场景不能满足测试需要,此时就需要自定义压测用户数的加载策略。我们在locust中可以直接使用 LoadTestshape类,它可以完全的控制用户数和产生率。
2、如何使用LoadTestshape类
在脚本文件中定义一个继承LoadTestshape类的类,locust在启动时发现文件中有使用这个类会自动启动。
在该类中需要定义tick()方法,该方法返回用户数以及产生率的元组(如果没有返回这两个测试将停止),locust启动后每秒调用一次该函数。
在LoadTestshape类中可以使用get_run_time()方法来获取测试运行的时间,使用此方法可以用来控制压测的总时间。
3、基于时间峰值策略
#启动策略:每隔10秒钟增加启动10个用户
#启动策略:每隔10秒钟增加启动10个用户
import datetime
from locust import LoadTestShape, task, constant, HttpUser
class MyUser(HttpUser):
wait_time = constant(1)
@task(1)
def task_1(self):
print("my_task!!!")
class MyCustomShape(LoadTestShape):
# time_limit设置时限整个压测过程为60秒
time_limit = 60
# 设置产生率一次启动10个用户
spawn_rate = 10
def tick(self):
'''
设置 tick()函数
并在tick()里面调用 get_run_time()方法
'''
# 调用get_run_time()方法获取压测执行的时间
run_time = self.get_run_time()
# 运行时间在 time_limit之内,则继续执行
if run_time < self.time_limit:
# user_count计算每10秒钟增加10个
user_count = round(run_time, -1)
print(str(user_count)+">>>>>"+datetime.datetime.now().strftime('%Y-%m-%d-%H:%M:%S.%f'))
return (user_count, self.spawn_rate)
return None
执行结果
4、基于时间阶段负载策略
#启动策略:前10秒钟-30秒用户数为10,30秒-60秒启动总用户数是30,大于60后启动总用户数是60个用户
#启动策略:前10秒钟-30秒用户数为10,30秒-60秒启动总用户数是30,大于60后启动总用户数是60个用户
import datetime
from locust import LoadTestShape, task, constant, HttpUser
class MyUser(HttpUser):
wait_time = constant(1)
@task(1)
def task_1(self):
print("my_task!!!")
class MyCustomShape(LoadTestShape):
'''
time -- 持续时间, 经过多少秒后,进入到下个阶段
users -- 总用户数
spawn_rate -- 产生率,即每秒启动/停止的用户数
'''
stages = [
{"time": 10, "users": 10, "spawn_rate": 10},
{"time": 30, "users": 30, "spawn_rate": 10},
{"time": 60, "users": 60, "spawn_rate": 10},
{"time": 600, "users": 60, "spawn_rate": 10},
]
def tick(self):
run_time = self.get_run_time()
for stage in self.stages:
if run_time < stage['time']:
tick_data = (stage['users'],stage['spawn_rate'])
return tick_data
return None
执行结果
5、逐步负载策略
import datetime
import math
from locust import LoadTestShape, task, constant, HttpUser
class MyUser(HttpUser):
wait_time = constant(1)
@task(1)
def task_1(self):
print("my_task!!!")
#启动策略:逐步负载策略每隔30秒新增启动10个用户
class MyCustomShape(LoadTestShape):
'''
step_time -- 逐步加载时间长度
step_load -- 用户每一步增加的量
spawn_rate -- 用户在每一步的停止/启动的多少用户数
time_limit -- 时间限制压测的执行时长
'''
setp_time = 30
setp_load = 10
spawn_rate = 10
time_limit = 600
def tick(self):
run_time = self.get_run_time()
if run_time > self.time_limit:
return None
current_step = math.floor(run_time /self.setp_time) +1
return(current_step * self.setp_load,self.spawn_rate)
执行结果
几种负载策略总结为 :tick方法返回值为元祖 (总用户数,每秒增加用户数)
备注:参考locust官方文档
docs.locust.io/en/stable/g…
原文来自:
作者:小黑测试员
链接:https://juejin.cn/post/6988698138726891550