性能测试的流程,分为四个阶段:
1、第一阶段:性能测试准备阶段
1.1 性能评估
性能测试准入原则:功能迭代已完成,预发布完成后,功能已经稳定
压测标准:确定哪些模块和接口需要做性能测试(不是所有需求和接口都要做性能测试)【性能测试必要性研究】
- (1)甲方需求,明确规定测试哪些接口性能
- (2)涉及生命财产安全,国计民生等,如:医疗系统、金融、保险等
- (3)大型产品上线之前,对于核心、用户使用率高的接口,例如活动秒杀
- (4)架构调整,前后的数据库调整等,需要升级SDK,需要重新做性能测试
- (5)业务剧增:业务增加,要做性能调优
- (6)底层bug修复,可能会影响到性能
1.2 需求分析
性能需求需要基于业务功能的
- 熟悉业务,接口关联、参数、数据库的关联,数据业务流等
- 熟悉项目的架构和通信协议:是http协议还是其他协议?了解项目架构,是为了定位性能问题,每个项目架构中间的步骤,都有科恩那个是性能问题
- 评估指标:要关注哪些业务指标及指标范围
每个公司指标都有差异,如果公司有指标,可以按照公司要求来,没有的话,参考行业内标准
ART < 1.5s
ERR < 0.1%
服务器资源利用率 < 80%
1.3 压测方案
执行测试计划、测试模型、评估工作量
- 测试模型是指做负载测试,还是性能测试,还是混合场景测试等
- 评估工作量,需要编写测试计划,如5W+H(why/when/who/where/what、how)
- 编写性能测试用例(同功能测试)
2、第二阶段:性能测试环境搭建
(1)搭建独立的性能测试环境,理论上,不能用功能的测试环境和线上环境,因为会相互影响。
(2)搭建好性能测试监控平台,如Prometheus、grafana、influxdb等
(3)安装性能测试工具:根据协议,选择合适的工具来开发性能测试脚本
- Jmeter:开源免费,跨平台【Linux、win、Mac】支持Http协议和websocker协议 Dubbo
- Loadrunner:商用收费,版本12免费只能使用50用户数,更新很慢,破解版本使用有风险,支持HTTP协议
- locust:结合Python语言开发
- PTS:阿里云性能测试工具,收费
(4)性能测试脚本开发,选择各种模型进行脚本设计
例如:压测场景设计,一般包含如下步骤:
* 1)先进行单接口功能测试:1个用户运行一段时间来验证脚本问题
* 2)单接口负载测试:逐步增加用户数关注TPS和RT,找到系统承受的最大并发用户数【拐点】,找到最优的TPS和最大承受并发用户数
* 3)进行单接口性能测试:使用负载测试找到的并发用户数去做单接口性能测试,得到性能指标数据结果
* 4)混合场景测试:多个接口同时压测,根据业务模型指定混合比例,真实业务混合比例下的系统指标【真实用户场景就是有用户注册、用户登录、用户下单等】
* 5)稳定性测试:长时间运行,确认系统的稳定性,确认系统是否报错和崩溃等【可以是单接口稳定性,也可以是混合场景稳定性】
3、第三阶段:压测执行、结果分析、性能调优
1)根据之前设计好的场景脚本,进行压测,一般使用CLI命令行去执行,或者使用分布式执行
2)测试记录:性能测试场景,响应时间,TPS,监控图表,简单分析结论等
3)性能测试过程中各种数据监控和收集:被测项目的监控(服务+服务器)、硬件资源监控、项目服务监控
4)测试结果和监控数据综合分析,定位问题、分析、调优(和开发一起进行)
- 由外及内进行检查:RT > TPS > 负载机器的资源情况 > 服务器资源情况 > 中间件、数据库配置 > 中间件、数据库耗时分析
- 由表及里进行检查:自身问题 > 服务器硬件瓶颈 > 服务器os瓶颈(参数配置、数据库、web服务器) > 应用瓶颈(SQL语句、数据库设计、业务逻辑、算法)
5)调优后再验证测试,并持续跟踪发现的性能bug
- 可能解决了一个性能问题,会出现另外一个性能问题
4、第四阶段:压测报告及结果评估
1)性能测试通过标准及验收标准,主要以公司内部标准为准:
判断维度 | 通过【行业内标准】 | 备注 |
---|---|---|
超时概率 | <0.5% | 没有绝对标准,由具体业务和项目组参考并评定 |
错误率 | <0.5% | 4xx、5xx状态码 |
响应时间 | <小于期望时间 | <1s优秀,<3s普通,5s客户忍耐上线 |
TPS | >大于期望值 | TPS越大越好 |
CPU利用率 | <80% | 以公司标准 |
内存利用率 | <80% | 以公司标准 |
2)整理编写性能测试报告
问题:你们公司的性能测试是怎么做的?
* ①首先做性能测试的需求分析,明确性能测试的目标、范围、场景、性能测试指标(响应时间、吞吐量、并发用户数等)
* ②性能测试环境搭建:项目+监控+工具等环境,搭建一套与生产环境尽可能一直的测试环境,包括硬件、网络、操作系统、数据库等都一致,最好隔离成独立环境
* ③选择工具编写性能测试脚本:如jmeter工具,根据测试场景编写性能测试脚本,模拟用户行为和数据交互
* ④执行性能测试:使用CLI命令行运行脚本,或者使用分布式压测,包括负载测试、压力测试、稳定性测试等
* ⑤性能测试结果分析:收集并分析测试结果,识别性能测试瓶颈和潜在问题,用Prometheus+grafana
* ⑥性能调优:根据分析结果进行性能调优,优化系统配置,辅助开发做代码调优实现等
* ⑦编写测试报告:编写性能测试报告,总结测试结果,分析性能瓶颈,提出优化建议等