QPS 测试工具

8 阅读5分钟

推荐 4 款最实用的 QPS 测试工具,覆盖「新手友好」「专业压测」「轻量快捷」「代码定制」四大场景,附具体使用方法和适配场景,可以根据 Laravel 12 项目(Swoole/RoadRunner)直接上手。

一、核心推荐:4 款 QPS 测试工具(按易用性排序)

1. Apache Bench(ab)—— 轻量快捷(新手首选)

特点:Linux/macOS 系统自带,无需安装,适合快速测单接口 QPS,上手成本为 0。适用场景:快速验证接口基本性能(如 Laravel 12 简单接口、静态页面)。

实战用法(测试 Laravel 12 接口):

bash

运行

# 核心命令:-n 总请求数 -c 并发数 测试地址
# 示例:10000个请求,并发100,测试 Laravel 12 的 /api/user 接口
ab -n 10000 -c 100 http://127.0.0.1:8080/api/user

# 关键输出解读(重点看这3个指标):
# Requests per second: 2857.14 [#/sec] (mean) → QPS(核心指标)
# Time per request: 35.000 [ms] (mean) → 平均响应时间
# Time per request: 0.350 [ms] (mean, across all concurrent requests) → 单请求实际耗时

优点:无需安装、命令简单;缺点:功能单一,不支持复杂场景(如 POST 请求、Cookie/Token)。


2. wrk —— 高性能轻量压测(替代 ab,推荐)

特点:比 ab 功能强、性能高,支持自定义脚本(Lua),可测 POST / 带鉴权接口,适合中小规模压测。适用场景:Laravel 12 带 Token 的接口、POST 提交接口、需要自定义请求头的场景。

安装(Linux/macOS):

bash

运行

# CentOS
yum install -y gcc make git
git clone https://github.com/wg/wrk.git
cd wrk && make && cp wrk /usr/local/bin

# macOS
brew install wrk
实战用法:

bash

运行

# 基础用法(GET接口,100并发,压测30秒)
wrk -t10 -c100 -d30s http://127.0.0.1:8080/api/user

# 高级用法(POST接口,带Token,用Lua脚本)
# 新建 post.lua 文件
vim post.lua

lua

-- post.lua 内容(适配 Laravel 12 POST 接口)
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.headers["Authorization"] = "Bearer your-laravel-token" -- Laravel 鉴权Token
wrk.body = '{"name":"test","email":"test@example.com"}' -- POST参数

bash

运行

# 执行POST压测
wrk -t10 -c100 -d30s -s post.lua http://127.0.0.1:8080/api/user/store

关键输出解读

plaintext

Running 30s test @ http://127.0.0.1:8080/api/user
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     3.50ms    1.20ms  20.00ms   85.00%
    Req/Sec     2.87k   200.00     3.50k    78.00%
  859998 requests in 30.01s, 1.2GB read
Requests/sec:  28656.45 → QPS(核心)
Transfer/sec:     40.98MB

优点:轻量、高性能、支持自定义脚本;缺点:不支持分布式压测,适合单机压测。


3. JMeter —— 专业全功能压测(企业级首选)

特点:图形化界面,支持分布式压测、复杂场景(多接口串联、数据库联动、参数化),适合大规模、复杂业务的 QPS 测试。适用场景:Laravel 12 完整业务流程(如 “登录→加购→下单”)、高并发秒杀场景、分布式压测。

核心步骤(测试 Laravel 12 接口):
  1. 下载安装:官网 jmeter.apache.org/ 下载,解压后运行 bin/jmeter.bat(Windows)/ bin/jmeter(Linux)。

  2. 创建测试计划

    • 右键「测试计划」→ 添加 → 线程组(设置:线程数 = 并发数,循环次数 = 总请求数 / 线程数);
    • 右键「线程组」→ 添加 → 取样器 → HTTP 请求(填写接口地址、请求方法、参数);
    • 右键「线程组」→ 添加 → 监听器 → 聚合报告(查看 QPS、响应时间)。
  3. 执行测试:点击「运行」按钮,聚合报告中「吞吐量」即为 QPS。

关键指标(聚合报告)

表格

指标含义示例值
吞吐量QPS(核心)3000.0
平均响应时间单个请求平均耗时30ms
90% 百分位90% 请求的响应时间45ms
错误率失败请求占比0.0%

优点:功能全、支持分布式、图形化易操作;缺点:占用资源高,大规模压测需多机部署。


4. k6 —— 代码化压测(开发者友好)

特点:用 JavaScript 编写测试脚本,语法简洁,适合开发者定制化压测,支持云原生部署。适用场景:Laravel 12 开发者快速编写压测脚本、CI/CD 集成压测。

安装:

bash

运行

# Linux
curl -L https://github.com/grafana/k6/releases/download/v0.49.0/k6-v0.49.0-linux-amd64.tar.gz | tar xzf -
cp k6-v0.49.0-linux-amd64/k6 /usr/local/bin

# macOS
brew install k6
实战用法(测试 Laravel 12 接口):

bash

运行

# 新建 test.js 脚本
vim test.js

javascript

运行

// test.js 内容
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 100, // 并发数(虚拟用户数)
  duration: '30s', // 压测时长
};

export default function () {
  // 1. 定义请求头(适配 Laravel 鉴权)
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your-laravel-token',
  };
  // 2. GET请求
  const res = http.get('http://127.0.0.1:8080/api/user', { headers });
  // 3. 校验响应是否正常
  check(res, {
    'status is 200': (r) => r.status === 200,
  });
  sleep(0.01); // 轻微延迟,模拟真实用户行为
}

bash

运行

# 执行压测
k6 run test.js

关键输出解读

plaintext

http_reqs.....................: 280000  9333.33/s  QPS(核心)
http_req_duration.............: avg=32ms  min=10ms  max=150ms  p90=45ms

优点:代码化、开发者友好、支持云原生;缺点:无图形化界面,适合技术人员使用。

二、工具选型建议(适配 Laravel 12 + Swoole/RoadRunner)

表格

场景推荐工具核心原因
快速验证接口 QPS(新手)ab/wrk无需安装 / 轻量,5 分钟出结果
带鉴权 / POST 接口测试wrk/k6支持自定义脚本,适配 Laravel 鉴权场景
复杂业务流程 / 分布式压测JMeter功能全,支持多接口串联、大规模压测
开发者定制化 / CI/CD 集成k6代码化脚本,易集成到 Laravel 部署流程
测试 Swoole/RoadRunner 性能wrk/k6低资源占用,能精准测到真实 QPS

三、测试 Laravel 12 性能的关键注意事项

  1. 测试环境:务必在「生产环境配置」下测试(关闭 APP_DEBUG、开启 OPcache、禁用 Xdebug),否则 QPS 数据失真;
  2. 并发数设置:从低到高逐步增加(如 50→100→200),观察 QPS 和响应时间的拐点;
  3. 资源监控:测试时用 top/htop 监控服务器 CPU / 内存,若资源跑满,QPS 不再增长即为服务器瓶颈;
  4. 多次测试:单次测试结果有波动,建议执行 3 次取平均值。

总结

  1. 新手 / 快速测试:优先用 ab(零成本)或 wrk(功能更强);
  2. 专业 / 复杂场景:用 JMeter(图形化)或 k6(代码化);
  3. Laravel 12 + Swoole/RoadRunner 测试:推荐 wrk,能精准反映常驻内存模式下的真实 QPS。

如果需要针对你的 Laravel 12 具体接口(如秒杀接口、用户列表接口)写 定制化的 QPS 测试脚本(wrk/k6/JMeter),我可以直接提供可复制的代码 / 配置。