4、Locust基础入门:安装Locust、编写第一个压测脚本、启动Web UI

好,咱们正式开始动手了。

这一章,我带你从零搭建Locust环境,写一个能跑起来的压测脚本,再启动那个漂亮的Web界面。说白了,就是让你先“玩起来”。

我个人习惯是,学一个新工具,先别管那么多理论,先让它跑通一个最简单的例子。有了体感,后面再深入细节就容易多了。

4.1 安装Locust

安装其实很简单。Locust是用Python写的,所以你得先有Python环境。我建议用Python 3.8以上版本,太老的版本可能会有兼容问题。

核心命令:

pip install locust

嗯,就这一行。但实际项目中,我强烈建议你用虚拟环境。为什么呢?

我曾经在一个老项目里直接全局安装,结果把项目依赖搞乱了,排查了半天。从那以后,我每个压测项目都单独建一个虚拟环境。

我的习惯做法:

# 创建虚拟环境
python -m venv locust_env

# 激活(Windows)
locust_env\Scripts\activate

# 激活(Mac/Linux)
source locust_env/bin/activate

# 安装Locust
pip install locust

装完之后,验证一下:

locust --version

如果看到版本号,比如 2.31.0,那就说明装好了。

4.2 编写第一个压测脚本

好,环境搞定了。接下来写脚本。

你想想看,一个最简单的压测脚本需要什么?无非就是:

  • 定义一个用户行为(访问哪个接口)
  • 设置一些基本参数(比如等待时间)

来看代码:

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    # 每个用户执行任务之间的等待时间(单位:秒)
    wait_time = between(1, 5)

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

这个脚本干了三件事:

  1. 定义用户类:WebsiteUser 继承 HttpUser,代表一个虚拟用户。
  2. 设置等待时间:between(1, 5) 表示每个用户执行完一个任务后,会随机等待1到5秒再执行下一个。这模拟了真实用户的操作间隔。
  3. 定义任务:用 @task 装饰器标记的方法,就是用户会执行的操作。这里我们只是简单地访问首页。

注意: self.client 是Locust内置的HTTP客户端,它已经帮你处理好了会话、请求统计等事情。你不需要自己用 requests 库。

保存这个文件,比如叫 locustfile.py。文件名无所谓,但默认情况下,Locust会找当前目录下叫 locustfile.py 的文件。

4.3 启动Web UI

脚本写好了,怎么跑起来?

Locust提供了两种模式:Web UI模式和命令行模式。咱们先玩Web UI,因为可视化,直观。

在终端里,切换到脚本所在目录,执行:

locust

如果一切正常,你会看到类似这样的输出:

[2024-01-15 10:30:00] Starting web interface at http://0.0.0.0:8089
[2024-01-15 10:30:00] Starting Locust 2.31.0

打开浏览器,访问 http://localhost:8089,就能看到Locust的Web界面了。

界面上会让你填几个参数:

  • Number of users (峰值并发用户数):你想模拟多少个虚拟用户?
  • Spawn rate (孵化速率):每秒增加多少个用户?比如填10,就是每秒增加10个用户,直到达到峰值。
  • Host (目标主机):你要压测的网站地址。比如 http://example.com。

填好之后,点击“Start swarming”,压测就开始了。

一个小技巧: 刚开始调试时,我建议把用户数设小一点,比如10个用户,孵化速率设成1。这样你能清楚地看到用户数逐渐增加的过程,也方便观察Web界面上的实时数据。

4.4 理解Web UI的关键指标

压测跑起来之后,Web界面上会实时显示一堆数据。别慌,咱们只看几个核心的:

指标 含义 我的经验
RPS (Requests per Second) 每秒处理的请求数 这是最直观的吞吐量指标。我一般先看这个。
Response Time (ms) 响应时间,包括平均值、中位数、95分位、99分位 重点关注95分位和99分位。平均值容易被极端值拉偏。
Failures 失败请求数/率 如果失败率超过1%,我会立刻停止压测,排查问题。
Users 当前活跃用户数 看是否达到了你设定的峰值。

你想想看,这些数据其实就回答了三个问题:

  • 系统能扛多少并发?(RPS)
  • 响应快不快?(响应时间)
  • 稳不稳定?(失败率)

4.5 本章知识体系

为了让你更清晰地理解这一章的内容结构,我画了一张图:

Locust基础入门知识体系 1. 安装Locust 2. 编写压测脚本 3. 启动Web UI pip install locust 推荐使用虚拟环境 HttpUser + @task wait_time = between(1,5) self.client.get("/") locust 命令启动 localhost:8089 访问 设置用户数/孵化速率 核心产出:一个可运行的压测脚本 + 实时Web监控

4.6 避坑指南

最后,分享几个我踩过的坑:

坑1:端口被占用

我曾经在启动Locust时,发现8089端口被别的程序占了。解决办法:指定其他端口。

locust --web-port 8090

坑2:找不到locustfile

如果你把脚本命名成别的名字,比如 my_test.py,启动时要指定:

locust -f my_test.py

坑3:目标地址写错

记得在Web界面上填对Host。我见过有人忘了加 http://,结果压测一直报错。嗯,这种低级错误我也犯过。

好了,这一章的内容就这些。你现在应该已经:

  • 装好了Locust
  • 写了一个能跑的压测脚本
  • 启动了Web UI,看到了实时数据

接下来,你就可以拿着这个基础,去压测你自己的接口了。

可可精品资料库