1. 性能测试概念
先声明一点:
无论是容量测试还是压力测试等其他描述,其实都是性能测试的不同描述,本身并不是策略,也不是测试方法或者概念。
ps:性能测试很多专有名词,eg 性能测试 负载测试 压力测试 容量测试 极限测试等, 概念又多又乱,界限又很模糊,如下:
压力测试:
是评估系统处于或超过预期负载时系统的健康情况,压力测试关注的点是在于系统在峰值容量以及超过峰值容量下的处理能力,还可以发现系统崩溃的临界点,从而发现系统中的薄弱环节
容量测试:
确定系统可处理的最大PCU,使系统承受超额数据容量来发现他是否能正确处理
极限测试:
在过量用户下的负载测试
所以性能测试的概念,应该是在有性能指标既定值的前提下,针对系统的性能指标,建立性能测试模型,指定相对应的测试方案,制定监控在策略,在科学的场景条件下执行该测试方案与模型,分析判断性能瓶颈并且调优,最终回归性能结果来评估性能指标是否满足既定值
2. 性能测试的要素
综上概念,
性能测试的要素有:指标,模型,方案,监控,场景
【性能测试模型】
客户真实使用场景的抽象,例如xx会议的客户使用场景,然后抽象出可描述业务模型;又例如,我们的服务有100个接口,但是只有其中50个接口存在并发的场景,且并发的比例不尽相同,所以我们压测的时候需要控制比例
大多数这样的场景数据都是从生产环境的大盘中统计出来的。
【性能测试方案】
方案中的关键点:测试环境,测试数据,测试模型,性能指标,压力策略,准入准出,进度风险
【性能测试监控】
监控需要具有分层,分段的能力,也要有全局监控和定向监控的能力
【性能测试的预定条件】
条件包括:硬件环境,测试数据,测试执行策略,压力补偿等,这些条件是在场景执行前就确定的
及时包括压力补偿,我们在动态扩展的判断条件也应有确定策略,eg:cpu使用率达到80%或者IO响应时间超过10ms,就做动态扩展
【性能测试场景】
在既定的环境(包括动态扩展策略),既定的数据(包括场景执行中的数据变化),既定的执行策略,既定的监控之下,执行性能脚本,同时观察系统各层级的性能状态参数变化,并实时判断分析场景是否符合预期
性能场景的分类:
- 基准性能场景:例如某服务单pod的容量,为混合容量做准备
- 容量性能场景:最核心的性能执行部分
- 稳定性性能场景:稳定性测试必然是性能场景的一个分类,但是在大多数实际项目中,稳定性测试往往和生产有偏差,在稳定性测试中,最核心的元素是时间(业务模型已经在容量场景中确定),而时间的设置应该来自于运维周期。
- 容灾性能场景:在有压力流量的前提下,模拟异常,这个异常的定义会比较宽泛
【性能测试的分析调优】
是否需要进行性能调优,性能调优是否是性能测试工程师的范畴其实还没有一个确论,但是可以做到性能调优的性能测试工程师并不多。
性能项目的分类:
- 新系统性能测试类:要求测试出系统的最大容量
- 旧系统新版本性能测试类:要求与旧版本横向对比,要求性能不下降
- 新系统性能测试优化类:不仅要求测出最大容量,且要求调优至最好
性能测试者的职责:
- 性能验证:针对给定的指标,只做性能验证
- 性能测试:针对给定的系统,做全面的性能测试,得到系统最大容量
- 性能测试 分析调优:在性能测试的基础上,同时将系统调优到最优的状态