> 文章列表 > 三、Locust任务(task)详解

三、Locust任务(task)详解

三、Locust任务(task)详解

当一个负载测试开始时,将为每个模拟用户创建一个用户类的实例,他们将在自己的绿色线程中开始运行。当这些用户运行时,他们会选择执行的任务,睡眠一段时间,然后选择一个新的任务,如此循环。

这些任务是正常的Python可调用的,如果我们是在测试一个拍卖网站的负载,它们可以做一些事情,如 “加载起始页”、“搜索一些产品”、“出价”,等等

1.任务装饰器

为用户添加任务的最简单方法是使用任务装饰器。

from locust import User, task, constantclass MyUser(User):wait_time = constant(1)@taskdef my_task(self):print("User instance (%r) executing my_task" % self)

@task需要一个可选的权重参数,可以用来指定任务的执行比例。

在下面的例子中,任务2被选中的可能性将是任务1的两倍。

from locust import User, task, betweenclass MyUser(User):wait_time = between(5, 15)@task(3)def task1(self):pass@task(6)def task2(self):pass

2.任务属性

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

任务属性是一个任务列表,或者是一个 dict,其中任务是一个 python 可调用函数或者一个 TaskSet 类。如果任务是一个普通的 python 函数,它们会收到一个参数,即执行任务的用户实例。

下面是一个User任务的例子,它被声明为一个普通的python函数。

from locust import User, constantdef my_task(user):passclass MyUser(User):tasks = [my_task]wait_time = constant(1)

如果tasks属性被指定为一个列表,每次要执行的任务将从tasks属性中随机选择。

然而,如果tasks是一个dict–以callables为键,以int为值–要执行的任务将被随机选择,但以int为比率。因此,对于一个看起来像这样的任务。

{my_task: 3, another_task: 1}

my_task被执行的可能性another_task的3倍。

在内部,上述dict实际上将被扩展成一个列表(并且任务属性被更新),看起来像这样。

[my_task, my_task, my_task, another_task]

然后用Python的random.choice()来从列表中挑选任务。

3.标签装饰器

通过使用@tag装饰器对任务进行标记,你可以使用–tags和–exclud-tags参数对测试中执行的任务进行挑剔。请看下面的例子。

from locust import User, constant, task, tagclass MyUser(User):wait_time = constant(1)@tag('tag1')@taskdef task1(self):pass@tag('tag1', 'tag2')@taskdef task2(self):pass@tag('tag3')@taskdef task3(self):pass@taskdef task4(self):pass

如果你用–tags tag1启动这个测试,在测试中只有task1和task2会被执行。

如果你用–tags tag2 tag3启动这个测试,则只有task2和task3会被执行。

–exclude-tags的行为将完全相反。所以,如果你用 --exclude-tags tag3 开始测试,只有 task1、task2 和 task4 会被执行。排除总是胜过包含,所以如果一个任务有一个你包含的标签和一个你排除的标签,它将不会被执行。

更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449
在这里插入图片描述
更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449