locust工具学习笔记(一)-User类、@task装饰器

编写locustfile文件
一份locustfile中,声明至少一个从该类继承的用户类

User class(用户类)
一个用户类别代表一个用户。locust将为每个正在模拟的用户生成User类的一个实例。User类可以定义一些公共属性。

公共属性
wait_time属性

可选属性,用于模拟用户在执行任务之间等待指定的时间。

constant在固定时间内

between在最大值和最小值之间的随机时间

constant_pacing自适应时间,以确保任务每X秒运行一次

from locust import User, task, between, constant, constant_pacing

class MyUser(User):
    @task
    def my_task(self):
        print("执行用户任务!")

    # wait_time = between(0.5, 10)  #每个用户在每次任务执行之间等待0.5到10秒
    # wait_time = constant(1)       #每个用户每次任务执行之间等待1秒
    wait_time = constant_pacing(1)  #每个用户在1秒内运行1次
自定义wait_time

class MyUser(Use r):
    '''
    User类将休眠一秒钟,然后休眠两个,然后休眠三个,依此类推
    '''
    last_wait_time = 0
    def wait_time(self):
        self.last_wait_time += 1
        return self.last_wait_time
weight属性

用来设置启动的模拟特定类型的用户比例,则可以在这些类上设置一个weight属性

class WebUser(User):
    weight = 3
    #...
class MobileUser(User):
    weight = 1
    #...
host属性

host属性是要加载的主机的URL前缀 ,可以在locustfile中指定host,若启动时没有指定就默认使用该设置。

environment属性

对用户正在运行的环境的引用。使用它与环境或它所包含的运行器交互。例如,从一个任务方法中停止runner

self.environment.runner.quit()
如果在独立locust实例上运行,则将停止整个运行。如果在工作程序节点上运行,它将停止该特定节点。

on_start和on_stop方法
用户(TaskSets)可以声明一个on_start方法和/或 on_stop方法。用户将on_start在开始运行时调用其方法,并on_stop在停止运行时调用其 方法 。

对于TaskSet,当模拟用户开始执行该TaskSet时调用on_start方法,当模拟用户停止执行该TaskSet时调用on_stop方法(当interrupt()被调用时,或者用户被杀死时)。

Locust类有setup和teardown,TaskSet类有setup、teardown、on_start、on_stop。

每次启动locust时运行setup方法,退出时运行teardown方法,locust执行TaskSet时运行TaskSet的setup方法,退出时运行teardown方法,每个虚拟用户执行操作时运行on_start方法,退出时执行on_stop方法

from locust import HttpLocust, TaskSet, task
 
class MyUserBehavior(TaskSet):
    def setup(self):
        print('task setup 每个任务开始前执行')
 
    def teardown(self):
        print('task teardown 每个任务结束前执行')
 
    def on_start(self):
        # 虚拟用户启动Task时运行
        print('start 虚拟用户启动Task时运行')
 
    def on_stop(self):
        # 虚拟用户结束Task时运行
        print('end 虚拟用户结束Task时运行')
 
    @task(2)
    def index(self):
        self.client.get("/")
 
    @task(1)
    def profile(self):
        self.client.get("/index")
 
 
class WebsiteUser(HttpLocust):
    def setup(self):
        print('setup 开始测试前执行')
 
    def teardown(self):
        print('teardown 测试结束后执行')
    task_set = MyUserBehavior
    min_wait = 5000
    max_wait = 9000
#执行顺序
setup 开始测试前执行

task setup 每个任务开始前执行

on_start 虚拟用户启动Task时运行

tasks  用户任务

on_stop  end 虚拟用户结束Task时运行

task teardown 每个任务结束前执行

teardown 测试结束后执行
tasks(任务)
当启动负载测试时,将为每个模拟用户创建一个User类的实例,它们将开始在自己的绿色线程中运行。当这些用户运行时,他们选择要执行的任务,休眠一段时间,然后选择一个新任务,等等。

@task装饰器

使用@task装饰器为用户添加任务,@task可选指定参数,该参数用于指定任务的执行率。

from locust import User, task

class MyUser(User):
    @task(1)
    def user_task1(self):
        pass
    
    @task(5)
    def user_task2(self):
        pass
# user_task2任务执行几率是user_task1的5倍   
task属性

定义用户任务的另一种方法是设置tasks属性

task属性指定为列表,则每次执行任务时,都会从task属性中随机选择

ask属性指定为字典,则每次执行任务时,按照字典值比例执行任务

from locust import User, constant

def my_task0(user):
    pass
def my_task1(user):
    pass
class MyUser(User):
    tasks = [my_task0,my_task1] 
    #tasks = {my_task0:1,my_task1:2}  执行不力是1:2
    
@tag装饰器
使用@tag装饰器标记任务后,使用--tags和--exclude-tags参数控制需要执行的任务

from locust import User, constant, task, tag

class MyUser(User):
    @tag('tag0')
    @task
    def my_task0(self):
        pass
    @tag('tag0', 'tag1')
    @task
    def my_task1(self):
        pass
    @tag('tag2')
    @task
    def my_task2(self):
        pass
启动测试时若指定参数--tags tag0,则测试只会执行my_task0,my_task1任务,若指定--tags tag2,则测试只会执行my_task2任务。

参数--exclude-tags与--tags参数作用相反
原文链接:https://blog.csdn.net/u012002125/article/details/112648190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值