Locust 快速入门

🌙
手机阅读
本文目录结构

快速入门

locustfile.py

下面是一个简单的locustfile.py的小示例

from locust import HttpLocust, TaskSet

def login(l):
    l.client.post("/login", {"username":"ellen_key", "password":"education"})

def logout(l):
    l.client.post("/logout", {"username":"ellen_key", "password":"education"})

def index(l):
    l.client.get("/")

def profile(l):
    l.client.get("/profile")

class UserBehavior(TaskSet):
    tasks = {index: 2, profile: 1}

    def on_start(self):
        login(self)

    def on_stop(self):
        logout(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

在这里,我们定义了许多Locust任务,它们是带有一个参数(Locust类实例)的普通 Python 可调用对象。这些任务收集在 task 属性中的TaskSet类下 。然后,我们有一个代表用户的 类,其中定义了模拟用户在执行任务之间应等待的时间,以及 应该定义用户的“行为”的类。 类可以嵌套。Http``Locust``TaskSetTaskSet

HttpLocust从类继承 Locust的类,并把它添加一个客户端属性,它是的一个实例 HttpSession,可用于使HTTP请求。

默认情况下,我们不再寻找代理设置以提高性能。如果您确实希望测试请求通过 HTTP 代理,则可以从HttpLocust该类继承,并将 trust_env 字段设置为 True。有关更多详细信息,请参阅请求文档。

我们可以声明任务的另一种方法(通常更方便)是使用 @task 装饰器。

以下代码与上面的代码等效:

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    def on_start(self):
        """ on_start is called when a Locust start before any task is scheduled """
        self.login()

    def on_stop(self):
        """ on_stop is called when the TaskSet is stopping """
        self.logout()

    def login(self):
        self.client.post("/login", {"username":"ellen_key", "password":"education"})

    def logout(self):
        self.client.post("/logout", {"username":"ellen_key", "password":"education"})

    @task(2)
    def index(self):
        self.client.get("/")

    @task(1)
    def profile(self):
        self.client.get("/profile")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

Locust类(以及HttpLocust 因为它是一个子类),也可以让一个在指定最小和最大等待时间毫秒,每个模拟用户之间的任务执行(min_wait 和 MAX_WAIT)以及其他用户的行为。

默认情况下,时间是在 min_wait 和 max_wait 之间均匀地随机选择的,但是可以通过将 wait_function 设置为任意函数来使用任何用户定义的时间分布。

例如,对于平均时间为 1 秒的指数分布等待时间:

import random

class WebsiteUser(HttpLocust):
    task_set = UserBehaviour
    wait_function = lambda self: random.expovariate(1)*1000

启动 Locust

要使用上述 Locust 文件运行 Locust,如果该文件名为locustfile.py且位于当前工作目录中,则可以运行:

$ locust --host=http://example.com

如果 Locust 文件位于子目录下和 / 或名称不同于 locustfile.py,请使用-f以下命令指定它:

$ locust -f locust_files/my_locust_file.py --host=http://example.com

要运行跨多个进程分布的 Locust,我们可以通过指定--master以下内容启动主进程 :

$ locust -f locust_files/my_locust_file.py --master --host=http://example.com

然后我们将启动任意数量的从属进程:

$ locust -f locust_files/my_locust_file.py --slave --host=http://example.com

如果要在多台计算机上运行 Locust 分布式服务器,则在启动从属服务器时也必须指定主服务器主机(在单台计算机上运行 Locust 时不需要,因为主服务器主机默认为 127.0.0.1):

$ locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100 --host=http://example.com

注意:要查看所有可用选项,请输入: locust --help

打开 Locust 的 Web 界面

使用上述命令行之一启动 Locust 后,应该打开浏览器并输入 http://127.0.0.1:8089(如果在本地运行 Locust)。

然后,您应该会看到类似以下内容:

_images/webui-splash-screenshot.png

另一个性能测试脚本

创建 load_test.py 文件,通过 Python 编写性能测试脚本。

from locust import HttpLocust, TaskSet, task

# 定义用户行为
class UserBehavior(TaskSet):

    @task
    def baidu_index(self):
        self.client.get("/")


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 3000
    max_wait = 6000

UserBehavior 类继承 TaskSet 类,用于描述用户行为。

baidu_index() 方法表示一个用户为行,访问百度首页。使用 @task 装饰该方法为一个事务。client.get() 用于指请求的路径“/”,因为是百度首页,所以指定为根路径。

WebsiteUser 类用于设置性能测试。

  • task_set :指向一个定义的用户行为类。
  • min_wait :执行事务之间用户等待时间的下界(单位:毫秒)。
  • max_wait :执行事务之间用户等待时间的上界(单位:毫秒)。

启动性能测试

> locust -f .\load_test.py --host=https://www.baidu.com

[2017-10-16 16:44:40,839] DESKTOP-SMGQBBM/INFO/locust.main: Starting web monitor at *:8089
[2017-10-16 16:44:40,842] DESKTOP-SMGQBBM/INFO/locust.main: Starting Locust 0.8
  • -f 指定性能测试脚本文件。
  • –host 指定被测试应用的 URL 的地址,注意访问百度使用的 HTTPS 协议。

通过浏览器访问:http://localhost:8089(Locust 启动网络监控器,默认为端口号为:8089)

设置测试数据

locust

  • Number of users to simulate 设置模拟用户数。

  • Hatch rate(users spawned/second) 每秒产生(启动)的虚拟用户数。

  • 点击 “Start swarming” 按钮,开始运行性能测试。

运行测试

locust

性能测试参数

  • Type: 请求的类型,例如 GET/POST。
  • Name:请求的路径。
    • 这里为百度首页,即:https://www.baidu.com/
    • 老铁们测试的时候,千万别用我的站测试啊,阿西河的服务器用的是小水管,垃圾机器,经不起各位大佬的测试; - -!
  • request:当前请求的数量。
  • fails:当前请求失败的数量。
  • Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。
  • Average:平均值,单位毫秒,所有请求的平均响应时间。
  • Min:请求的最小服务器响应时间,单位毫秒。
  • Max:请求的最大服务器响应时间,单位毫秒。
  • Content Size:单个请求的大小,单位字节。
  • reqs/sec:是每秒钟请求的个数。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了