当一个负载测试开始时,将为每个模拟用户创建一个用户类的实例,他们将在自己的绿色线程中开始运行。当这些用户运行时,他们会选择执行的任务,睡眠一段时间,然后选择一个新的任务,如此循环。
这些任务是正常的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
更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449