Locust 2.8 任务集 TaskSet

任务集

TaskSet

TaskSet是一个任务集合,里面所有的任务都是同时进行的,没有先后顺序,支持嵌套

class MyTaskSet1(TaskSet):

    # @task
    # 加了权重只后,运行率会更均匀,可能是locust的问题吧
    @task(1)
    def task1(self):
        self.client.get('/task1')


class MyTaskSet2(TaskSet):

    # @task
    @task(1)
    def task2(self):
        self.client.get('/task1')


class Play(HttpUser):
    tasks = [MyTaskSet1, MyTaskSet2]

理论上这两个 TaskSet 执行的数量应该是一样的但是并没有,加了 task 的权重只后是均分的,可能是 locust 没有权重的情况下任务分配的问题吧

还有一个需要注意的地方,这里100用户数,是同时被两个 TaskSet 消费的,也就是说每个用户会选择其一去执行它

image-20220328203824683

嵌套写法:

from locust import TaskSet, task, HttpUser, constant


class UserTask(TaskSet):
    @task
    class stay(TaskSet):
        @task
        def readBook(self):
            self.client.get('/readBook')

        @task
        def listenMusic(self):
            self.client.get('/listenMusic')
            # 退出当前任务集
            self.interrupt()

    @task
    def leave(self):
        self.client.get('/leave')


class User(HttpUser):
    tasks = [UserTask]
    wait_time = constant(2)

没有 interrupt() 方法的执行结果:

可以看到,在执行过第一轮之后,后续就不再执行 leave 了,只会运行 stay 中的任务

image-20220328202554257

有 interrupt() 方法的执行结果:

在足够长的运行时间下,可以看到每个任务的执行率都是相同的

image-20220328200757044

SequentialTaskSet

按顺序执行的任务集,此示例的执行顺序是 task1 -> task2 -> task3

跟 TaskSet 一样,是支持嵌套的,可以使用这个特性设计复杂的业务场景

class MyTaskSet(SequentialTaskSet):

    @task
    def task1(self):
        self.client.get('/task1')

    @task
    def task2(self):
        self.client.get('/task2')

    @task
    def task3(self):
        self.client.get('/task3')

class Play(HttpUser):
    tasks = [MyTaskSet]
    wait_time = constant(1)

执行结果:

任务分配的很均匀,而且始终保持 task1 -> task2 -> task3 这样的顺序执行

需要注意的是,我启动了100个用户,被 3 个 task 平均分配了

我们在设计性能测试场景的时候,一定要注意这个任务被每一个 task 平均分配的问题,很可能你分配的用户数量并不符合你预期并发量,这跟 jmeter 是有非常大差别的

image-20220328205335991

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值