一般性能测试流程都是:获取测试需求——>测试需求分析——>测试方案设计——>压测环境搭建(目前是线上)——>测试数据准备——>测试脚本准备、调试——>测试脚本执行——>监控数据录入——>测试结果跟开发一起分析——>出具测试报告
前置的需求收集、策略选择之类的,可以参考我这篇文章:https://blog.csdn.net/qq_42905388/article/details/135865043
一、压测环境准备
一般来说,进行性能测试的环境都是在UAT或者独立的性能测试环境,但为了准确描述环境类型和配置,以及测试环境和生产环境的区别,一般会对生产环境和测试环境进行对比说明。
1.1 确认待测业务的系统架构
由于涉及公司业务安全,此处我就不放我们的架构图了。
正常就是确认下客户端层、业务层(包含一些同步依赖)、基础层(涉及脚本、中间件)、异步业务层。
1.2 确认服务配置
1.2.1 名词介绍
CPU配置:1C代表1核心处理器。2C代表2核心处理器。4C代表4核心处理器。8C代表8核心处理器。
常见的有2C4G、4C8G、8C16G等等,意思就是2核心处理器4GB内存的云服务器,以此类推。
1.2.2 梳理配置
一般包含:服务名称、配置数量、具体配置(静态资源、动态资源使用的软限、硬限)、主从设计
1.3 确认机器配置
redis集群配置、tidb数据库配置、服务机器配置、mysql集群配置 等,有可能也是散落在各个平台查看的。
二、压测数据管理
2.1.1 数据准备
无论是数据量级、分布方式、是否缓存、缓存大小还是热点数据(用户的热点请求对应的数据,例如登陆态数据等等),都是需要考虑的地方。
性能测试中,主要有如下几种类型:
1、基础数据
对于性能测试来说,基础数据一般指的是支撑业务流程正常运行所必备的数据,需要考虑如下几个方面:
1)数据量级:根据环境具体配置信息,保证数据量级和生产环境等比例,是很有必要的事情;
2)数据脱敏:从经验来说,基础数据的量级一般较大,常见的准备方式都是copy生产数据并进行脱敏;
2、测试数据
测试数据是为了满足被测业务场景的链路而所需的数据,在具体的压测准备阶段,需要根据被测链路,针对性的准备测试数据,保证场景的正常执行;
3、唯一性数据
某些比较特殊的被测场景,所需的数据是具有唯一属性的,或者一次性使用的特性。
从经验来说,这类数据,建议通过走正常的业务逻辑去生成,可以根据所需数据量大小来准备。
4、参数化数据
这类数据一般是具有可复用性的,比如productId/userId…,建议提前了解整体的业务和技术类型,准备一批量级较大的数据,避免重复工作。
2.1.2 注意事项
注意压测后的数据恢复、压测数据清理
三、压测脚本准备
3.1.1 脚本和工具准备
可以使用jmeter,或者自研工具
3.1.1 其他注意事项
1、可复用的尽量集成为工具,后续替换参数即可复用;
2、脚本的执行顺序;
四、数据监控
部分公司的数据会散在各种平台里,所以做方案的时候最好就梳理出来。
业务监控总览、业务rpc QPS、业务CPU跟内存(确认下有没有除以核数)、DB、REDIS、链路追踪 等
五、容量规划的一些名词
qps的计算 : ( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
例如: 每天300w PV 的在单台机器上,这台机器需要多少QPS = ( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)
单机能力 = 单台服务器压测的阀值 qps(通过线下压测)
单机负荷 = 上线后单台机器最大qps(或是通过线下压测)
集群能力 = 单机能力 * 机器数(机器环境一致)
集群负荷 = 上线后集群最大QPS(单机负荷 * 服务器数量)
水位标准
单机房 : 70%
双机房 : 40%
三机房 : 60%
单个机房容量计算
单机水位 = (单机负荷/单机能力) * 100%
集群水位 = (集群负荷/集群能力) * 100%
理论机器数 = (实际机器数 * 集群负荷 * 集群水位) /(集群能力 * 水位标准)
机器增减 = 理论机器数 – 实际机器数 or 实际机器数 – 理论机器数
参考:http://www.inter12.org/archives/657
六、出具测试报告以及对结果最初步分析
6.1 性能瓶颈寻找:通过TPS(QPS)、响应时间、线程进行分析
这里大部分还是要靠经验。比如:
- 正常线程数量增加,每秒的处理事务数量也会跟着增加,如果线程增加了,TPS没有持续增加,且响应时间也跟着增加了,系统的瓶颈显而易见地出现了。
- 火焰图相关知识参考:https://blog.csdn.net/gatieme/article/details/78885908
6.2 推荐分析指标
6.2.1 RPC服务指标:
rpc服务tp99指标、内存
1、本周最大QPSXXX最小XXX
2、接口最大平均耗时XXX
3、接口TP90XXXX,TP99XXXX,TP999XXXX
4、内存占用最大XX最小XXX平均XXX
5、CPU(除以核数)占比最大XX最小XXX平均XXX
6、routine数量
7、堆对象数量
8、GC耗时
6.2.2 缓存指标:
1、qps最大XXX最小XXX
2、memory usage
6.2.3 Mysql指标:
1、qps最大XXX最小XXX