软件测试接口测试从入门到精通:接口性能测试 - 量化系统承载能力
17 接口性能测试 - 量化系统承载能力本章目标理解性能测试概念掌握JMeter和Python进行接口性能测试的方法。17.1 性能测试基础什么是性能测试性能测试验证系统在特定负载条件下的响应速度、稳定性和资源消耗。性能测试类型性能测试负载测试压力测试稳定性测试并发测试正常负载下的表现极限负载下的表现长时间运行的稳定性多用户同时访问关键指标指标说明合格标准响应时间请求到响应的时间 500ms接口吞吐量每秒处理请求数TPS/QPS根据业务需求错误率失败请求占比 0.1%并发用户数同时在线用户数根据业务需求CPU使用率服务器CPU占用 80%内存使用率服务器内存占用 80%17.2 JMeter性能测试线程组配置线程组 ├── 线程数用户: 100 ├── Ramp-Up时间秒: 10 ├── 循环次数: 永远 └── 持续时间秒: 300HTTP请求配置HTTP请求 ├── 协议: https ├── 服务器名称: api.example.com ├── 方法: GET ├── 路径: /api/v1/products └── 参数: ├── page: 1 └── size: 20监听器监听器用途聚合报告平均响应时间、吞吐量查看结果树单个请求详情图形结果响应时间趋势响应断言验证响应正确性聚合报告解读字段说明Label请求名称Samples请求总数Average平均响应时间msMedian中位数响应时间90% Line90%请求响应时间低于此值95% Line95%请求响应时间低于此值99% Line99%请求响应时间低于此值Min最小响应时间Max最大响应时间Error %错误率Throughput吞吐量req/s17.3 Python性能测试使用locust# 安装locustpipinstalllocustlocustfile.pyfromlocustimportHttpUser,task,betweenclassApiUser(HttpUser):wait_timebetween(1,3)# 请求间隔1-3秒defon_start(self):每个用户启动时执行self.login()deflogin(self):responseself.client.post(/api/v1/login,json{username:admin,password:123456})self.tokenresponse.json()[data][token]task(3)# 权重3defget_products(self):self.client.get(/api/v1/products?page1size20)task(1)# 权重1defget_user_info(self):self.client.get(/api/v1/users/me,headers{Authorization:fBearer{self.token}})运行Locust# 启动Locustlocust-flocustfile.py# 访问Web界面# http://localhost:8089# 设置并发用户数和每秒启动用户数17.4 性能测试流程需求分析场景设计脚本开发基准测试负载测试压力测试瓶颈分析优化验证性能测试场景设计场景并发数持续时间目的基准测试110分钟获取单用户性能基线正常负载5030分钟验证日常运行性能峰值负载20015分钟验证高峰期性能压力测试500直到崩溃找到系统极限稳定性测试1008小时验证长时间稳定性17.5 性能瓶颈分析常见瓶颈性能瓶颈应用层代码效率低SQL慢查询内存泄漏数据库层索引缺失锁竞争连接池耗尽中间件层Redis缓存失效MQ堆积负载均衡不均系统层CPU饱和内存不足磁盘IO高网络带宽定位方法工具用途JProfiler/ArthasJava应用分析MySQL Slow Log慢SQL查询Redis INFORedis性能Linux top/iostat系统资源Wireshark网络分析17.6 本章小结性能测试核心性能测试测试类型负载测试压力测试稳定性测试关键指标响应时间吞吐量错误率工具JMeterLocustk6分析瓶颈定位优化验证课后练习 实践题用JMeter设计一个100并发、持续5分钟的性能测试。编程题用Locust编写一个电商系统的性能测试脚本。17.7 下章预告下一章我们将学习接口安全测试“性能测试不是为了让系统更快而是为了知道系统能有多快。”