当前位置: 首页 > 工具软件 > Locust > 使用案例 >

locust官方文档-User Class

巫新知
2023-12-01

User class
一个用户类代表一个用户(或者一个成群的蝗虫)。Locust将为每个被模拟的用户生成一个User类的实例。User类可以定义一些常见的属性。

wait_time属性
User的wait_time方法可以很容易地在每个任务执行后引入延迟。如果没有指定wait_time,下一个任务将在一个任务完成后立即执行。
四种传参方式:
1.固定的时间(constant)
2.介于最小值和最大值之间的随机时间(between)
例如,让每个用户在每次任务执行之间等待0.5 - 10秒:

from locust import User, task, between

class MyUser(User):
    @task
    def my_task(self):
        print("executing my_task")

    wait_time = between(0.5, 10)
	3.constant_throughput设置一个自适应时间,确保任务每秒运行(最多)X次。
	4.constant_pacing为一个自适应时间,确保任务(最多)每X秒运行一次(它是constant_throughput的数学倒数)

PS.
例如,如果希望Locust在峰值负载下每秒运行500次任务迭代,可以使用wait_time = constant_throughput(0.1)和5000个用户数。
等待时间只能限制吞吐量,不能启动新的用户到达目标。因此,在我们的示例中,如果任务迭代的时间超过10秒,吞吐量将小于500。
等待时间是在任务执行后应用的,所以如果你有一个高孵化率/上升,你可能会在上升期间超过你的目标。
等待时间适用于任务,而不是请求。例如,如果指定wait_time = constant_throughput(2)并在任务中执行两个请求,那么请求率/RPS将为每个用户4。

也可以直接在类上声明自己的wait_time方法。例如,下面的User类会休眠一秒,然后是两秒,然后是三秒,等等。

class MyUser(User):
    last_wait_time = 0

    def wait_time(self):
        self.last_wait_time += 1
        return self.last_wait_time

    ...

weight和fixed_count属性
如果文件中存在多个用户类,并且没有在命令行中指定用户类,那么Locust将生成数量相等的每个用户类。你也可以通过将它们作为命令行参数传递来指定在同一个locustfile中使用哪些用户类:

locust -f locust_file.py WebUser MobileUser

如果希望模拟某种类型的更多用户,可以在这些类上设置权重属性。举个例子来说,WebUser比MobileUser有三倍的可能性:

class WebUser(User):
    weight = 3
    ...

class MobileUser(User):
    weight = 1
    ...

您还可以设置fixed_count属性。在这种情况下,权重属性将被忽略,并生成准确的用户计数。这些用户是先生成的。在下面的示例中,将生成AdminUser的唯一实例,以更精确地控制请求计数,而不依赖于用户总数。

class AdminUser(User):
    wait_time = constant(600)
    fixed_count = 1

    @task
    def restart_app(self):
        ...

class WebUser(User):
    ...

host attribute
host属性是要加载的主机的URL前缀(即“http://google.com”)。通常,当Locust启动时,这是在Locust的web UI中或在命令行中使用——host选项指定的。
如果在用户类中声明了一个host属性,当命令行或web请求中没有指定——host时,就会使用它。

tasks attribute
User类可以使用@task装饰器将任务声明为方法,但也可以使用tasks属性指定任务,下面将详细描述。

environment attribute
对运行用户的环境的引用。使用它与环境或它所包含的运行器交互。例如,从一个任务方法中阻止runner:

self.environment.runner.quit()

如果在一个独立的蝗虫实例上运行,这将停止整个运行。如果在worker节点上运行,它将停止该特定节点。

on_start and on_stop 方法
Users (和TaskSets)可以声明一个on_start方法和/或on_stop方法。User在开始运行时调用它的on_start方法,在停止运行时调用它的on_stop方法。对于TaskSet, on_start方法在模拟用户开始执行TaskSet时调用,on_stop方法在模拟用户停止执行TaskSet时调用(当调用interrupt()或用户被杀死时)。

 类似资料: