性能测试思维导图
中心主题:性能测试
第一层:核心概念
- 1. 什么是性能测试?
- 定义:对软件系统在特定负载下的性能指标进行度量和评估的过程。
- 目的:发现性能瓶颈、评估系统容量、确保用户体验、为系统优化提供依据。
- 2. 为什么需要性能测试?
- 避免线上事故:防止因高并发导致系统崩溃或响应缓慢。
- 优化用户体验:确保用户操作流畅,提升满意度和留存率。
- 规划系统容量:确定系统能够支持的最大用户数和数据量。
- 验证系统稳定性:在长时间运行下,系统是否依然可靠。
- 成本效益分析:在硬件投入和软件优化之间找到平衡点。
- 3. 关键性能指标
- 响应时间:从发出请求到收到第一个字节的时间。
- 平均响应时间
- 90/95/99分位响应时间:衡量极端情况下的性能。
- 吞吐量:单位时间内系统处理的请求数或事务数。
- QPS (Queries Per Second):每秒查询数。
- TPS (Transactions Per Second):每秒事务数。
- HPS (HTTP Requests Per Second):每秒HTTP请求数。
- 并发用户数:在同一时刻与系统进行交互的用户数量。
- 逻辑并发用户:模拟用户操作的数量。
- 物理并发用户:实际与服务器建立连接的用户数量。
- 资源利用率:系统硬件资源的使用情况。
- CPU 使用率
- 内存 使用率
- 磁盘 I/O:读写速率、IOPS。
- 网络带宽:入站/出站流量。
- 错误率:在测试过程中失败的请求数占总请求数的百分比。
- 响应时间:从发出请求到收到第一个字节的时间。
- 4. 性能测试类型
- 负载测试:在预期负载下,验证系统是否满足性能需求。
- 压力测试:逐步增加负载,直到系统达到瓶颈或崩溃,找到系统的极限。
- 稳定性测试/耐力测试:在正常或高负载下,长时间运行系统(如8小时、24小时),检查是否存在内存泄漏、性能衰退等问题。
- 并发测试:模拟多个用户同时操作,测试系统对并发事务的处理能力。
- 配置测试:在不同硬件或软件配置(如CPU、内存、数据库连接池大小)下,测试系统性能的变化,找到最优配置。
- 尖峰测试:模拟用户量在短时间内急剧增加和减少的场景,测试系统的缓冲和恢复能力。
第二层:测试流程
- 1. 测试计划
- 明确测试目标:本次测试要验证什么?(如:支持5000并发用户)
- 确定测试范围:测试哪些功能模块?哪些接口?
- 设计测试场景:模拟什么样的用户行为?(如:80%浏览,20%下单)
- 准备测试数据:构造符合业务逻辑的、足够规模的数据。
- 制定准入/准出标准:什么条件下可以开始测试?什么条件下算测试通过?
- 2. 测试设计
- 场景设计:将用户行为组合成测试场景。
- 脚本开发:使用工具录制或编写性能测试脚本。
- 参数化:使用不同数据(如用户ID、商品ID)。
- 关联:处理动态数据(如从登录响应中提取Token)。
- 断言:检查响应结果是否符合预期。
- 测试环境准备:搭建与生产环境隔离但配置相似的测试环境。
- 3. 测试执行
- 场景部署:将设计好的场景部署到性能测试工具中。
- 启动测试:按照计划逐步增加虚拟用户数。
- 实时监控:观察各项性能指标的变化,监控应用服务器、数据库等资源。
- 问题记录:当出现性能瓶颈或错误时,详细记录现场信息。
- 4. 结果分析与调优
- 数据收集:收集测试工具、监控工具的原始数据。
- 瓶颈定位:分析数据,找到性能瓶颈所在(是CPU?数据库?网络?还是代码逻辑?)。
- 性能调优:与开发、运维协作,针对瓶颈进行优化。
- 回归测试:优化后,重新执行测试,验证瓶颈是否解决,且未引入新问题。
- 5. 测试报告
- 测试总结:概述测试目标、范围、过程。
- 数据展示:使用图表(如趋势图、对比图)展示关键指标。
- 结论与建议:明确给出系统性能是否达标,并提出改进建议。
第三层:关键技术
- 1. 测试脚本技术
- 协议:HTTP/HTTPS, FTP, SMTP, WebSocket, 数据库协议等。
- 语言:Java, Python, JavaScript (for Web), C# 等。
- 关键技巧:
- 参数化:模拟真实用户的多样性。
- 关联:处理动态会话和令牌。
- 思考时间:模拟用户操作间的停顿。
- 集合点:控制虚拟用户在同一时刻发起请求,用于压力测试。
- 2. 监控技术
- 应用层监控:APM (Application Performance Monitoring) 工具。
- 功能:代码级性能分析、链路追踪、慢查询定位。
- 工具:SkyWalking, Pinpoint, New Relic, Datadog。
- 系统层监控:操作系统和中间件监控。
- 工具:
top,vmstat,iostat,netstat(Linux), Prometheus + Grafana, Zabbix。
- 工具:
- 数据库监控:数据库性能指标。
- MySQL:
SHOW PROCESSLIST,SHOW STATUS,slow query log。 - Redis:
INFO,monitor命令。
- MySQL:
- 应用层监控:APM (Application Performance Monitoring) 工具。
- 3. 瓶颈定位方法
- 自顶向下分析法:
- 用户体验:响应时间慢。
- 应用服务器:CPU/内存高,GC频繁,线程阻塞。
- 数据库:慢查询,锁竞争,连接池满。
- 网络:带宽不足,延迟高。
- 存储:磁盘I/O瓶颈。
- 黄金法则:90%以上的性能问题都与数据库有关。
- 自顶向下分析法:
第四层:常用工具
- 1. 商业/企业级工具
- LoadRunner (Micro Focus):老牌、功能强大,支持协议广泛。
- JMeter Enterprise (Blazemeter):基于JMeter,提供云平台和更强大的分析能力。
- NeoLoad (Neotys):对现代技术栈(如微服务、API)支持好,易于使用。
- 2. 开源/免费工具
- JMeter (Apache):首选,开源免费,社区活跃,插件丰富,功能强大。
- Gatling:基于Scala,性能极高,生成的HTML报告非常直观。
- Locust:基于Python,编写脚本简单,支持分布式,可读性好。
- k6:基于JavaScript/TypeScript,开发者友好,CI/CD集成度高。
- 3. 监控与APM工具
- Prometheus + Grafana:监控领域的标准组合,强大且灵活。
- SkyWalking / Pinpoint:优秀的分布式链路追踪系统。
- ELK Stack (Elasticsearch, Logstash, Kibana):日志分析利器。
第五层:高级话题
- 1. 云性能测试
- 云平台工具:阿里云PTS、腾讯云Cloud Test、AWS Load Testing。
- 优势:弹性伸缩、按需付费、覆盖地域广。
- 2. 分布式性能测试
- 目的:单台压测机无法模拟超大规模并发时,使用多台机器协同工作。
- 实现:Gatling, Locust, JMeter (通过控制器/代理模式) 均支持。
- 3. 性能测试自动化
- CI/CD集成:将性能测试作为构建流程的一部分,每次代码提交后自动执行。
- 目的:持续监控性能,防止性能衰退。
- 4. 性能测试模型
- 容量规划模型:根据业务增长预测未来的资源需求。
- 成本模型:评估不同性能优化方案的成本效益。
第六层:挑战与最佳实践
- 1. 常见挑战
- 测试环境与生产环境差异:导致测试结果不准确。
- 测试数据准备困难:数据量、数据分布难以模拟真实场景。
- 瓶颈定位复杂:涉及多个技术栈,协作成本高。
- 性能测试左移困难:在开发早期进行性能测试有难度。
- 2. 最佳实践
- 尽早测试:将性能测试融入到开发的早期阶段。
- 环境一致性:尽量保证测试环境与生产环境配置一致。
- 建立性能基线:为系统建立性能基准,用于后续对比。
- 持续监控:在生产环境中持续进行性能监控。
- 团队协作:开发、测试、运维、DBA紧密合作。
- 关注用户体验:最终目标是优化用户的真实感受。

