你刚上线了一个小网站,或者改完接口准备发版,心里总有点打鼓:万一突然来几百人同时刷页面,服务器会不会直接卡死?这时候,HTTP压力测试就派上用场了——它就像给网站做一次“体检”,提前看看它扛不扛得住。
为什么需要HTTP压力测试?
不是所有网站都得搞高并发,但哪怕是个个人博客,如果某天被转发到热门社区,瞬间涌入几十个请求,也可能让页面加载变慢甚至打不开。用工具模拟真实访问,比等用户投诉再救火靠谱得多。
curl + time:最轻量的“土法测试”
如果你只是想快速试试某个接口快不快,连安装都不用,直接终端敲两行:
time curl -s -o /dev/null http://localhost:8080/api/user多跑几次,看平均耗时。适合临时验证,但没法模拟并发,属于“单点摸底”。
ab(Apache Bench):老牌又顺手
Linux/macOS 自带,Windows 也能装。比如模拟 100 个用户,总共发 1000 次请求:
ab -n 1000 -c 100 http://example.com/结果里重点关注 Requests per second(每秒请求数)和 Time per request(平均响应时间)。数值掉得厉害,说明接口或数据库可能有瓶颈。
hey:Go 写的小而快,支持 POST 和 JSON
比 ab 更现代一点,安装简单:go install github.com/rakyll/hey@latest。测一个带参数的登录接口:
hey -m POST -d '{"username":"test","password":"123"}' -H "Content-Type: application/json" -n 500 -c 50 https://api.example.com/login输出清晰,自带图表式统计,新手一眼能看懂哪块拖了后腿。
locust:想可视化、可写逻辑?选它
Python 写的,适合需要自定义行为的场景。比如模拟用户先登录、再刷新三次首页、最后提交表单。写个 locustfile.py:
from locust import HttpUser, task
class QuickstartUser(HttpUser):
@task
def load_homepage(self):
self.client.get("/")
@task
def load_api(self):
self.client.get("/api/status")启动后打开 http://localhost:8089,网页里调并发数、看实时曲线,像开控制台一样直观。
小提醒
别在生产环境乱跑压测;本地测时关掉杀毒软件和浏览器其他标签页;优先测核心接口(如登录、下单),而不是全站扫一遍;压出问题后,先看日志,再查数据库连接池或 Nginx 超时设置——工具只是镜子,照出的是你自己的配置和代码。