Locust入门

Locust 是一个开源的负载测试工具,用于测试网站、API 或其他系统的性能和可扩展性。它使用 Python 编写,允许用户通过编写 Python 代码来定义用户行为,并模拟大量并发用户访问系统。Locust 的优点是简单易用、可扩展性强,并且支持分布式测试。

以下是关于 Locust 的详细介绍和使用指南:

1. Locust 的核心概念

  • User:模拟用户的行为,每个用户会执行一系列任务。
  • Task:用户执行的具体操作,例如访问某个 API 或点击某个按钮。
  • Load Test:通过模拟大量用户并发访问系统,测试系统的性能。
  • Master 和 Worker:在分布式模式下,Master 负责协调,Worker 负责执行任务。

2. 安装 Locust

Locust 可以通过 pip 安装:

pip install locust

3. 编写 Locust 测试脚本

Locust 测试脚本是一个 Python 文件,定义了用户行为和任务。

示例脚本:

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    # 用户等待时间(秒)
    wait_time = between(1, 5)

    @task
    def visit_homepage(self):
        # 访问首页
        self.client.get("/")

    @task  # 权重为 3,表示执行频率更高
    def visit_about_page(self):
        # 访问关于页面
        self.client.get("/about")

脚本说明:

  • HttpUser:表示模拟 HTTP 请求的用户。
  • wait_time:定义用户执行任务之间的等待时间。
  • @task:定义用户的任务,可以设置权重(如 @task 表示该任务执行频率更高)。
  • self.client:用于发送 HTTP 请求。

4. 运行 Locust

在终端中运行以下命令启动 Locust:

locust -f locustfile.py
  • -f:指定测试脚本文件(如 locustfile.py)。

启动后,Locust 会提供一个 Web 界面,默认地址为 http://localhost:8089

5. 使用 Locust Web 界面

在浏览器中打开 http://localhost:8089,可以看到以下选项:

  • Number of users:模拟的用户数量。
  • Spawn rate:每秒启动的用户数量。
  • Host:目标系统的 URL(如 http://example.com)。

设置完成后,点击 Start swarming 开始测试。

6. 查看测试结果

Locust 的 Web 界面会实时显示测试结果,包括:

  • Statistics:请求的统计信息(如请求数、失败数、响应时间等)。
  • Charts:性能图表(如 RPS、响应时间分布等)。
  • Failures:失败的请求详情。
  • Exceptions:异常信息。

7. 分布式测试

Locust 支持分布式测试,可以通过多个 Worker 模拟更多用户。

启动 Master:

locust -f locustfile.py --master

启动 Worker:

locust -f locustfile.py --worker --master-host=<master-ip>
  • --master-host:指定 Master 的 IP 地址。

8. 命令行运行

如果不使用 Web 界面,可以通过命令行运行 Locust:

locust -f locustfile.py --headless -u 100 -r 10 -t 1m --host=http://example.com

  • --headless:无界面模式。
  • -u:用户数量。
  • -r:每秒启动的用户数量。
  • -t:测试时长(如 1m 表示 1 分钟)。
  • --host:目标系统的 URL。

9. 高级功能

  • 自定义客户端:除了 HTTP,还可以测试其他协议(如 WebSocket、gRPC)。
  • 事件钩子:在测试的不同阶段执行自定义逻辑(如测试开始、测试停止)。
  • 参数化数据:使用 CSV 或其他数据源动态生成请求参数。

示例:参数化数据

import csv
from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 5)

    def on_start(self):
        # 读取 CSV 文件
        with open("data.csv") as f:
            self.data = list(csv.DictReader(f))

    @task
    def visit_page(self):
        for row in self.data:
            self.client.get(f"/page/{row['id']}")

10. 示例:测试 API

以下是一个测试 REST API 的示例脚本:

from locust import HttpUser, task, between

class ApiUser(HttpUser):
    wait_time = between(1, 3)

    @task
    def get_users(self):
        self.client.get("/api/users")

    @task
    def create_user(self):
        self.client.post("/api/users", json={"name": "John", "email": "john@example.com"})

11. 性能优化

  • 减少日志输出:在测试脚本中禁用不必要的日志输出。
  • 使用 FastHttpUser:如果需要更高的性能,可以使用 FastHttpUser 替代 HttpUser
  • 分布式测试:通过多个 Worker 分散负载。

12. 与其他工具集成

  • Prometheus:将 Locust 的测试结果导出到 Prometheus。
  • Grafana:通过 Grafana 可视化测试结果。
  • CI/CD:将 Locust 集成到 CI/CD 流水线中,自动化性能测试。

总结

  • Locust 是一个简单易用且功能强大的负载测试工具。
  • 通过编写 Python 脚本,可以灵活定义用户行为和任务。
  • 支持分布式测试和命令行运行,适合大规模性能测试。
  • 提供实时测试结果和性能图表,便于分析和优化系统性能。
进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务