Locust 是一个用 Python 编写的开源的负载测试工具。 它允许您针对模拟用户行为的 Web 应用程序编写测试,然后按规模运行测试以帮助查找瓶颈或其他性能问题。
目录
下面是 locustfile.py 的一个例子,它定义了一个简单的用户行为,它由一个获取特定网页的“任务”组成:
1个任务
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
@task
def get_something(self):
self.client.get("/something")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
2个任务随机执行
class UserBehavior(TaskSet):
@task
def get_something(self):
self.client.get("/something")
@task
def get_something_else(self):
self.client.get("/something-else")
当上面的 UserBehavior 运行时,Locust 将在每个任务之间随机选择并运行它们。 如果你想为不同的任务定义权重,那么你可以按照下面的方法来加权:
2个任务按权重执行
class UserBehavior(TaskSet):
@task(2)
def get_something(self):
self.client.get("/something")
@task(1)
def get_something_else(self):
self.client.get("/something-else")
权重定义了所有任务执行的比例,所以这里 get_something 在负载测试中的频率会是 get_something_else 的两倍。
您也可以编写嵌套的任务,以执行一系列连续的或有特殊顺序的任务。 这使您可以通过多个请求来定义用户操作流。 例如:
2个任务连续或特殊顺序执行
class UserBehavior(TaskSet):
@task
def get_something(self):
self.client.get("/something")
@task
def get_something_else(self):
self.client.get("/something-else")
@task
def get_two_things(self):
self.get_something()
self.get_something_else()
TaskSet 类可以有选择地声明一个 on_start 函数,当模拟用户开始执行该 TaskSet 类时会调用该函数。 在开始负载测试之前,可以使用它来登录:
client.post()
class UserBehavior(TaskSet):
def on_start(self):
self.client.post("/login",
{
'username': 'foo', 'password': 'bar'
})
@task
def get_something(self):
self.client.get("/something")
Locust 是一个非常有用的负载测试工具,特别是作为一个开源项目。 如果您的代码库是基于 Python 的,由于有机会从现有的代码库中获取数据,模型或业务逻辑,所以这自然是您可以使用的最舒服的工具,但即使您不使用 Python,也可以轻松整合它。