一、性能测试分类
- 服务端性能测试
- 客户端性能测试
- 全链路性能测试
二、服务端性能测试
比如测试一个简单登录功能,在只考虑正常流程的情况下无非就是输入正确的账户和密码点击登录,然后跳转到系统首页。
注意,这里的登录是只考虑正常流程的情况下,而在这里功能测试也不是重点。
如何对该登录功能进行性能测试呢?
就是在确保功能测试已经通过的情况下,模拟多个用户同时进行登录,在这过程中监控系统的各项性能指标及服务器硬件资源的使用情况。
性能测试的三个基本特点:
- 功能测试已通过
- 一定的并发用户
- 监控各项性能指标与硬件资源使用情况
三、性能测试类型
- 基准测试
基准测试是指模拟单个用户执行业务场景,监控系统的性能指标与服务器资源。严格来说,基准测试不属于性能测试的范畴,它与功能测试其实没有太大的区别。
基准测试的目的更多的是关注业务功能及验证脚本的一个准确性,然后,将基准测试时采集到的结果(各项性能指标及服务器硬件资源)作为后续并发测试性能分析的一个参考依据。
- 负载测试
负载测试是模拟系统在正常负载压力场景下,考察系统的各项性能指标。这里说的正常负载,主要是指用户对系统能承受的最大负载量的期望值。即预计系统最大可用支持的业务并发用户数。
通过负载测试,可以验证系统是否能满足我们预期的一个业务压力场景。通过负载测试,得到系统的性能拐点(最佳性能点),当达到这个点时,系统的极限与表现能力又是多少。负载测试也经常用于线上流量评估。
- 压力测试
压力测试是测试系统在多大并发压力下系统的性能会变得不可接受,或者出现性能拐点(崩溃)。在加压策略上,压力测试会对被测系统逐步加压,
在加压的过程中考察系统性能指标的走势情况,最终找出系统在出现性能拐点时的并发用户数,也就是系统支持的最大并发用户数。
压力测试主要用于测试系统或系统某些部分的极限能力。通过一直增加负载,直到应用的部分功能不能正常工作,压力测试的目的是找到被测系统的容量天花板。
- 负载测试和压力测试区别
- 负载测试是验证系统是否满足预期的业务压力场景;而压力测试是找到测试系统的容量天花板。
- 负载测试是模拟多个用户不同时间段内持续向系统发送请求的,而压力测试是模拟同一时间段内持续不断的向系统发送请求的。
- 疲劳强度测试
疲劳强度测试与负载测试testing觉得挺接近的,都是对系统模拟出系统能承受的最大业务负载量。
差异在于,疲劳强度测试的侧重点是系统在长时间运行情况下系统各项性能指标的变化情况。例如:系统在运行24 * 3后,是否会出现事务处理失败、响应时间增长、业务吞吐量降低、CPU/内存资源增长等性能问题。
- 稳定性测试
稳定性测试是指被测系统被用户正常的使用,能持续多长时间运行而不出现错误。
疲劳强度测试是指被测系统可以支持的最大并发数长时间模拟运行业务,通过资源和性能指标侧面分析系统的稳定性。
- 容量测试
当系统业务越来越复杂的时候,比如双十一、春节等大促。我们应该怎么评估线上的性能?如何去做合理的扩容?这个时候就需要开展相应的容量测试了。
- 总结
通过对比可以发现,不同的性能测试类型,其本质的差异还是体现在了加压策略上,而采用哪种加压策略,就取决于我们性能测试的目的,即希望通过性能测试发现什么问题。
四、性能测试指标
业务性能指标
- 并发用户数
- 事务吞吐率(TPS/RPS)
- 事务平均响应时间
- 事务成功率
系统资源性能指标
-
服务器:
CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等。
-
数据库:
数据库连接数、数据库读写响应时长、数据库读写吞吐量等;
-
网络:
网络吞吐量、网络带宽、网络缓冲池大小;
-
缓存(Redis):
静态资源缓存命中率、动态数据缓存命中率、缓存吞吐量等;
-
测试设备(压力发生器):
CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等。
看到最后一项(测试设备)有些人可能会问了,监控被测系统环境的相关硬件资源使用情况时,为什么还要关注测试设备本身呢?
因为测试设备在模拟高并发请求的过程中,测试设备本身也会存在较高的资源消耗,例如CPU、内存、网卡带宽吃满,磁盘IO读写频繁,处理器排队严重等;
当出现这类情况后,测试设备本身就出现了瓶颈,无法产生预期的并发压力,从而在测试中得到的数据也就不具有可参考性了
四、性能测试步骤
-
获取性能测试需求,确定性能目标
-
设计及确定测试方案|测试计划
-
提取测试的业务场景,设计测试用例
-
构建性能测试环境
-
编写性能测试脚本和基准测试
-
执行性能测试和分析
-
测试结果分析和报告
五、性能测试工具
- Locust
- LoadRunner
- Jmeter
六、资源监控工具
- nmon
nmon是一款帮助收集服务器的各项硬件资源信息的工具。这款工具在操作上还是有些繁琐的。安装后需要命令行运行,然后在收集信息的同时不能实时监控服务器资源;
收集信息完后还需要导出收集结果在去nmon官方的一个可视化工具里处理形成可视化报表
- grafana
Grafana是一款强大的监控工具,使用Grafana可以自定义自己的监控指标,但是Grafana官方提供了非常多的实用模板,使用官方的模板是一个快速开启监控的好办法哦。
监控Linux服务器资源,我可以使用Grafana+Prometheus+Node Exporter进行监控,而且是实时的,也支持报表导出等。
监控Mysql,我可以使用Grafana+mysqld_exporter+Prometheus进行监控。这样监控都在Grafana。