概念:特殊测试,性能分享,性能优化前提及基础
目的:确保一定负载流量下运行良好
目标:找到潜在的性能问题或瓶颈,分析并解决;找出性能变化趋势,为后续扩展系统提供参考。
工程解释:
性能测试是针对系统的性能指标,建⽴性能测试模型,制定性能测试⽅案,制定监控策略,在场景条件之下执⾏性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满⾜既定值。
性能测试实际上主要关注如下三点:
- 速度:TPS、RT ;
- 容量:吞吐量、PV、Hit;
- 资源:CPU、Memory、DiskIO、Network、文件句柄数;
性能分层
- 网络层:主要指带宽、网段、防火墙等设施,当然,CND之类的资源,也可以划分在这一领域;
- 网关层:网关是请求入口和业务接入层,一般登录验签调用、加解密鉴权、限流等操作,都是在网关进行;
- 应用层:无论是前端的渲染展示还是后端的逻辑处理,都可以理解为应用层;
- 中间件:中间件包含缓存、MQ、JOB、DTS/DRC/DAL、配置中心等一系列组件;
- 存储层:一般指数据存储和文件存储层级,典型的组件有MySQL、HDFS;
- 物理层:无论是云服务还是自建机房,物理硬件层面都可以归纳到这一层;
分类方式
目的 | 环境 | 测试对象 | 测试流量 | 负载数据 | 黑盒 | 白盒 |
服务速度 | 开发 | 负载流量大小 | 产品数据真实请求/数据 | |||
可扩展性 | 产品 | 负载速度 | 模拟请求/数据 | |||
稳定性 | ||||||
性能瓶颈 |
种类
“比喻:
性能测试,一个秘书对一个老板。
负载测试,一个秘书对一个部门。
压力测试。一个秘书对多个部门。”
流量 | 低流量 | |||
分类 | 冒烟(Smoke Testing) | 耐力(Endurance Testing)/浸泡(Soak Testing) | 基准/回归 | |
概念 | 冒烟测试是开发人员在开发环境里执行的简单测试 | 非功能性测试。耐力测试是长时间测试具有预期负载量的系统,以验证系统的行为是否正常.偏重点是测试时间 | 基准测试或者性能回归测试是着重“前后”对比的测试.这种测试往往是开发过程的一部分,一般不需要具体的性能要求。 | |
作用 | 确定新的程序代码不出故障。冒烟测试目的是确认系统和程序基本功能正常。冒烟测试的执行者往往就是开发人员,但有时也让运维人员参与。 | 执行耐力测试最常见的用例是暴露某些不易重现的问题,如内存问题、系统故障或其他随机问题 | 对代码修改前后进行基准测试,并比较前后的性能结果。执行基准测试的重点是保证前后测试环境的一致,比如负载流量的特征和大小 | |
流量 | 中流量 | |||
分类 | 负载(Load Testing) | 断点(Breakpoint Testing) | 尖峰(Spike Testing) | 可扩展性(Scalability Testing) |
概念 | 负载测试的定义有时太广泛和模糊,很多其他测试都可以看作是负载测试的一种,比如马上就要讲到的容量测试,其实就是一种负载测试 | 断点测试类似于压力测试或者容量测试。这种测试的过程是随着时间的推移而增大流量负载,同时监视系统的预定故障条件。 | 这种测试是通过突然增加或减少由用户产生的负载来观察系统的行为。 | 确定一个程序和系统的非功能性特征能不能在变化的环境里合理扩展。这里的环境变化包括系统环境的变化、负载量的大小、请求的多样性、数据量的大小等 |
作用 | 验证被测试系统或者程序是否可以处理预期的负载流量,并验证正常和峰值负载条件下的系统和程序行为。 | 用来确定系统将达到其所需规范或服务水平协议的最大容量,并且自动采取措施来纠正或者缓解。比如云计算环境中,我们可以设置某种性能断点,用它们来驱动某种扩展和伸缩策略。 | 用于确定系统在负载(比如用户请求数)突然变化时的系统行为。 | 了解系统在什么样的环境中,以及什么样的变化会导致系统不能扩展。发现这些环境后,可以进一步有针对性的分析和加强。 |
流量 | 高流量 | |||
分类 | 容量(Capacity Testing、Volume Testing) | 瓶颈(Bottleneck Testing) | 压力(Stress Testing) | |
概念 | 一般是会不断增大负载,并且不断地测量各种性能指标。在性能目标变得不可接受之前,系统和程序可以成功处理的负载大小,就是单位容量可以承担的负载。为了尽量让得到的结果匹配实际生产环境,采用的负载流量最好是真正的生产环境的请求和数据。可调节的流量负载、性能的测量、可以接受的性能指标。这三个部分一起就可以决定单位容量(比如一台服务器)的最大负载容量。 | 特殊的压力测试 | 压力测试也是一种负载测试,不过它偏重的是在负载增加到超过系统设计预期后观察和验证系统的行为 为了暴露系统的问题,因此采用的负载不一定是真正的生产数据和客户请求。 | |
作用 | 用于确定一个单位容量能够支持的最大负载 | 找到被测试系统和程序的最制约的资源类型(比如CPU或者存储) | 通过增加负载,对系统施压到超出设计期望的负载时,就能发现哪个模块或组件首先因超载而失败 |