网站上线前总得看看扛不扛得住大流量,服务器扩容前也得摸清真实负载能力——这时候,一个趁手的压力测试工具就是刚需。不用花大价钱买商业软件,不少开源工具功能扎实、文档齐全,连小公司开发团队和独立开发者都在用。
JMeter:老牌全能选手
Apache JMeter 出道早、生态熟,支持 HTTP、FTP、JDBC、WebSocket 等多种协议,还能通过 GUI 或命令行运行。写好脚本后导出为 .jmx 文件,CI/CD 流水线里也能直接调用。
简单启动示例:
jmeter -n -t test_plan.jmx -l result.jtl适合需要图形化调试接口链路、又希望后期自动化压测的场景,比如电商秒杀前模拟 10 万用户并发登录+下单。
wrk:轻量快如闪电
如果你只想快速验证一个 API 接口在高并发下的响应时间和吞吐量,wrk 是极简首选。单核 CPU 上轻松跑出 20K+ 请求/秒,体积小、无依赖,Linux/macOS 下一条命令就能开干。
例如压测 Nginx 默认页:
wrk -t4 -c100 -d30s http://localhost:8080/输出直接告诉你平均延迟、每秒请求数、传输速率,没有多余信息,适合日常巡检或临时摸底。
vegeta:Go 写的命令行利器
vegeta 上手比 wrk 略多一步,但灵活性更强。支持从文件读取 URL 和请求体,能模拟不同请求头、POST JSON、甚至按比例混搭多种请求路径。
生成并执行压测任务:
echo "GET http://api.example.com/users" | vegeta attack -rate=50 -duration=10s | vegeta report结果带直方图和延迟分布,开发写完新接口,顺手丢两行命令就能看稳不稳定。
k6:开发者友好的现代选择
k6 用 JavaScript(ES6)写脚本,内置指标监控和云集成能力,本地跑完还能一键上传到 k6 Cloud 查看可视化报告。语法干净,支持环境变量、参数化数据、检查点断言。
一段基础脚本长这样:
import http from 'k6/http';
import { check, sleep } from 'k6';
export default function () {
const res = http.get('http://localhost:3000/api/status');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1);
}前端工程师改个接口地址就能上手,后端联调时配合 mock 服务做端到端压测也很顺滑。
locust:Python 写的分布式扛把子
想模拟真实用户行为?比如 60% 用户刷首页、20% 搜商品、20% 加购物车——locust 就是为此而生。用纯 Python 写用户任务流,支持 Web 实时监控面板,横向扩展节点也简单。
一个典型 task 示例:
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(1, 3)
@task
def view_home(self):
self.client.get("/")
@task
def search_product(self):
self.client.get("/search?q=laptop")启动后打开 http://localhost:8089 就能看到实时并发数、响应时间热力图,中小团队做复杂业务链路压测很省心。
这些工具不靠花哨界面吃饭,靠的是稳定、透明和可复现。选哪个?看你手头是什么语言栈、要压测的协议类型、还有有没有现成的 CI 环境——有时候,最顺手的那个,就是最好的那个。