API接口性能测试就是模拟多个用户同时调用你的API接口,看看在高负载下的表现怎样-响应快不快、能扛多少并发、会不会出错。
一、确定测试目的
先问自己几个问题:
这个接口预期每秒要处理多少请求?
响应时间要控制在多少毫秒以内?
在高负载下允许的失败率是多少?
这些目的一般来自业务需求或服务等级协议(SLA),比如“登录接口在100并发下,95%的请求响应时间不超过200ms,错误率低于0.1%”。
二、选定性能标准
性能测试主要重视四个标准:
响应时间:从发送请求到收到完整响应所花费的时间。一般看平均值、中位数、90%/95%/99%分位值,避免被极端值掩盖。
吞吐量(TPS/QPS):每秒成功处理的请求数或事务数,代表系统的处理能力。
并发用户数:同时发起请求的用户数量,不等于线程数,要看实际活跃程度。
错误率:失败请求占总请求的比例,一般要求低于1%甚至0.1%。
此外,还要重视服务器资源占用(CPU、内存、磁盘IO、网络带宽),以及数据库连接数、慢查询等后端标准。
三、选择测试工具
常用的性能测试工具有:
JMeter:开源、免费,图形化界面,功能强大,支持分布式压测,是大多数团队的第一选择。
Locust:根据Python,用代码定义用户行为,更适合开发人员,分布式支持好。
LoadRunner:商业工具,功能全面,但成本高。
wrk / ab:轻量级命令行工具,适合简单快速测试。
对于初学者,从JMeter开始比较友好。
四、设计测试场景
根据测试目的,设计不同的场景:
负载测试:逐步增加并发用户,观察性能标准的变化,找到系统的拐点。
压力测试:不断高负载,甚至超过预期峰值,看系统在极限下的表现,以及能否自动恢复。
稳定性测试:在中等负载下长时间运行(如24小时),检查是不是有内存泄漏、资源不释放等问题。
尖峰测试:模拟瞬间大量请求,测试系统应对突发流量的能力。
每个场景都需要确定:
接口地址、请求方法(GET/POST等)、请求头、请求体(参数化数据)。
并发线程数、启动时间(爬坡期)、不断运行时间。
五、准备测试环境
环境隔离:尽量在独立环境(如预发布环境)测试,避免影响线上用户。
数据准备:保证测试数据足够多且真实,避免因数据唯一性约束导致失败。比如注册接口需要大量不同的手机号。
监控部署:提前部署好服务器的监控工具(如Prometheus、Zabbix),方便实时查看资源使用情况。
六、编写测试脚本
以JMeter为例,步骤大致如下:
创建线程组,设置并发数、爬坡时间、循环次数。
添加HTTP请求取样器,填入接口信息。
如果需要参数化,使用CSV数据文件或随机函数。
添加断言,检查响应结果是不是正确(如状态码200、返回内容包含“success”)。
添加监听器(如聚合报告、查看结果树),用于收集测试数据。
脚本写好后在本地用少量用户试跑,保证没有思路错误。
七、执行测试和监控
逐步加压:不要一上来就怼到目的并发,应该从低到高,比如10、50、100、200…观察每个阶段的表现。
实时观察:在压测过程中,一边看工具输出的响应时间、错误率,一边看服务器CPU、内存、网络、数据库标准。
记录数据:每个阶段结束后保存聚合报告,截图监控曲线。
八、分析结果和调优
测试完成后,分析数据:
如果响应时间在某个并发后急剧上升,说明系统达到短板。
如果错误率突然飙升,可能是连接池耗尽、数据库死锁、代码未加锁等问题。
结合服务器监控,判断短板在哪里:CPU打满?内存不足?磁盘IO过高?数据库连接数不够?
然后针对性调优,比如:
代码方面:优化SQL、增加缓存、减少锁粒度。
配置方面:扩大连接池、调整线程池大小、开启压缩。
架构方面:增加节点做负载均衡、引入消息队列削峰。
调优后再测试,直到满足目的。
九、编写测试报告
报告应包含:
测试环境说明(硬件、软件、网络)
测试场景和并发设置
性能标准(响应时间分布、TPS、错误率)
资源占用情况
结果和建议(是不是达标,存在哪些风险)
如果你们公司没有专业的测试团队,也可以委托第三方机构来做。如湖南卓码软件测评有限公司,有CMA和CNAS双资质,出具的API性能测试报告全国通用,可在国家市场监督管理局官网查询,既专业又权威。