性能测试分类
常见的有负载测试,压力测试,稳定性测试,并发测试等
负载测试:
逐步增加系统负载,测试系统性能的变化,确定在满足系统指标的情况下,系统所能够承受的负载量。对于负载测试来说,前提是满足性能指标要求。比如对于一个登录请求,要求响应时间不超过1秒,在这个前提下,持续增加请求量,假如请求量超过1w,响应时间超过1秒,则在响应时间不超过1秒的前提下负载量为1w
压力测试:
逐步给系统增加压力,观察系统性能指标,使系统某些资源达到饱和或系统崩溃的边缘,来确定系统所能承受的压力
稳定性测试:
给系统一个合理、固定的压力值,持续性发压,观察系统性能指标是否稳定,一般内存泄露问题会在此阶段暴露
并发测试:
模拟用户并发访问,测试多用户并发访问某个应用,服务,接口或者数据记录时,是否存在死锁或其他性能问题
性能测试关键指标
资源占用率
- 系统对机器资源的使用情况,包括CPU利用率、内存利用率、磁盘利用率等。资源利用率是分析软件性能瓶颈的重要参数。
- CPU
指标主要指的CPU使用率、利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。CPU使用率、利用率要低于业界警戒值范围之内,即小于或者等于75%、CPU sys%小于或者等于30%,CPU wait%小于或者等于5%。单核CPU也需遵循上述指标要求。 - 内存
现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。 - 磁盘
指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的重要依据,一般情况下,磁盘繁忙率要低于70%。 - 网络
网络吞吐量指标主要有每秒有多少兆流量进出,一般情况下不能超过设备或链路最大传输能力的70%。
吞吐量
- 单位时间内系统能够完成的工作量,它衡量的是软件系统服务器的处理能力。吞吐量的度量单位可以是请求数/秒、页面数/秒、访问人数/天、处理业务数/小时等
响应时间
- 系统对用户请求做出响应所需要的时间。这个时间是指用户从软件客户端发出请求到用户接收到返回数据的整个过程所需要的时间,包括各种中间件(如服务器、数据库等)的处理时间。(服务端测试来说,表示接口响应时间),响应时间越短,表明软件的响应速度越快,性能越好
- 参考标准
不同行业不同业务可接受的响应时间是不一样的,需要根据自身情况设定合适的符合用户使用要求的响应时间。
一般情况,对于在线实时交易:
— 互联网企业:500毫秒以下,例如淘宝业务10毫秒左右。
— 金融企业:1秒以下为佳,部分复杂业务3秒以下。
— 保险企业:3秒以下为佳。
— 制造业:5秒以下为佳。
qps
- 系统每秒钟能够处理的请求量
tps
- 系统每秒钟能够处理的事务和交易的数量,它是衡量系统处理能力的重要指标
成功率
- 成功率指系统在负载情况下,失败成功的概率。可以根据交易数或请求数直接计算得出。对于稳定性较好的系统,其错误大概率由超时引起,即为超时率
- 成功率=(失败成功数/交易总数)×100%
- 参考标准
不同的系统对成功率的要求不同,但通常会要求成功率不低于99.4%,即错误率不超过千分之六。
性能测试目标
- 了解系统性能情况,比如,通过性能测试,可以知道系统对机器资源占用情况,响应时间,qps等,结合线上真实流量情况,根据这些来判断系统是否需要扩容
- 发现系统存在的性能问题,常见的性能问题有
- 负载均衡不均匀
在高压情况下,每台服务器接收的压力值不均匀,导致部分服务器因为压力过大而出现性能急剧下降,部分服务器因为并发过小而出现资源浪费的情况。 - 内存泄漏
在固定压力值情况下,因为代码执行结束后没有主动释放内存资源而导致内存占用率持续稳定增加,最终会使服务器物理内存全部耗光,程序运行逐渐变慢,最终因为无法申请到内存而退出运行。内存泄漏多数情况下是非常缓慢的增加,不容易被发现,一般需要通过高并发稳定性压测才能暴露。 - 链接泄漏
链接泄露种类非常广泛,可以是数据库连接泄漏、HTTP连接泄漏或者其他的TCP/UDP连接泄漏等。除了系统实际情况需要建立长连接外,一般短连接都应该是用完就需要关闭和释放。 - 线程安全问题
在高并发访问的多线程处理中经常会出现,表现为多个线程先后更改数据,造成所得到的数据全部是脏数据。 - 死锁
出现在多并发情况下,为保证有限的资源正常使用,从而上锁,最后因为一线程(进程)无法及时释放资源,导致死锁。常见的有系统死锁、数据库死锁等。 - 扩展性问题
一般是指性能指标无法满足预期的情况下,通过横向或者纵向扩展硬件资源后,系统性能指标无法按照一定的线性规律进行快速递增。
- 性能调优或解决性能测试中存在的问题和性能瓶颈。