三、Locust任务(task)详解

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

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

1.任务装饰器

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

from locust import User, task, constant

class MyUser(User):
    wait_time = constant(1)

    @task
    def my_task(self):
        print("User instance (%r) executing my_task" % self)

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

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

from locust import User, task, between

class 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, constant

def my_task(user):
    pass

class 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, tag

class MyUser(User):
    wait_time = constant(1)

    @tag('tag1')
    @task
    def task1(self):
        pass

    @tag('tag1', 'tag2')
    @task
    def task2(self):
        pass

    @tag('tag3')
    @task
    def task3(self):
        pass

    @task
    def 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
三、Locust任务(task)详解_第1张图片
更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449

你可能感兴趣的:(python,开发语言)