locust工具学习笔记---自定义负载策略

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 = 10def 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 =  600def 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值