python locust--TaskSet

本文介绍Locust性能测试框架中TaskSet类的作用及用法,包括自定义任务集、设置任务执行概率、使用任务嵌套等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、TaskSet类简介

        用户自定义场景和操作需继承TaskSet类,Locust中task_set属性需指向用户自定义的TaskSet类。当locust执行时,每个locust都会执行task_set指向的TaskSet类中定义的场景和操作。

二、使用task装饰器指定tasks

        @task后面的weight指定task的执行概率,值越大执行概率越高,以下代码中task1的执行概率是task2的两倍。

from locust import Locust, TaskSet, task


class MyTask(TaskSet):
    def longin(self):
        print('这不是task')
    
    @task(6)
    def task1(self):
        print('我是task1,我执行的概率高')

    @task(3)
    def task2(self):
        print('我是task2,我执行的概率低')


class MyLocust(Locust):
    max_wait = 9000
    min_wait = 3000
    task_set = MyTask
    host = 'https://www.baidu.com'

三、 TaskSet 属性

        1、tasks

                tasks可以是一个callable的list或者一个classable: int 的dict,如果是list,list的中task将会随机执行,如果是dict,task将会随机的按照int指定的数值概率去执行。如下代码:                

from locust import Locust, TaskSet


def my_task1(l):
    pass


def my_task2(l):
    pass


class MyTaskSet(TaskSet):
    # tasks = [my_task1, my_task2]   # 随机执行list中的task
    tasks = {my_task1: 3, my_task2: 1}  # 按照3:1的概率随机执行dict中的task
    pass


class MyLocust(Locust):
    task_set = MyTaskSet

        2、max_wait和min_wait

               类似于Locust,覆盖Locust中的等待时间。

        3、parent

                task嵌套时使用。

        4、locust

               实例化的时候指向Locust实例。

四、task嵌套

        因为网站大部分设计都是分级式,所以task之间的嵌套显得很有必要,如下网站架构:

                       

from locust import Locust, TaskSet, task


class MainUserBehaviour(TaskSet):

    @task(2)
    def index(self):
        pass

    @task(1)
    def about(self):
        pass

    @task(3)
    class ForumPage(TaskSet):
        @task(10)
        class ReadThread(TaskSet):
            @task(2)
            def reply(self):
                pass

            @task(1)
            def stop(self):
                self.interrupt()

        @task(5)
        def new_thread(self):
            pass

        @task(2)
        def view_next_page(self):
            pass

        @task(1)
        def stop(self):
            self.interrupt()

    @task(4)
    class BrowserCategories(TaskSet):
        @task(1)
        def stop(self):
            self.interrupt()
        
        @task(5)
        def watch_movie(self):
            pass
        
        @task(5)
        def filter_movie(self):
            pass


class MyWebsite(Locust):
    task_set = MainUserBehaviour
注意:interrupt(),在task class中必须定义,否则进来之后就不出去了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值