1.常见的性能问题
(1)内存泄漏
软件运行的时候没有回收内存,导致系统运行越来越慢
(2)CPU使用率达到百分之百
(3)线程死锁,阻塞,造成系统运行越来越慢
(4)查询速度越来越慢
(5)受外部系统的影响越来越大
2.为什么要进行性能测试
(1)获取系统性能的指标,作为性能基准指标
一个新系统,你不熟悉这个系统的性能指标;
(2)验证系统的性能指标是否符合需求
应用系统是否能够满足系统的各项性能指标;
应用系统是否可以处理预期的用户数量,并且是否有盈余能力;
应用系统是否可以处理预期的事务数量;(事务-->一系列密切相关的操作)
在预期和非预期的情况下,系统是否可以稳定的运行;
在预期或者非预期的情况下,用户使用软件时是否可以获得舒适的体验;
(3)看系统是否有内存泄漏等瓶颈问题
(4)系统在正常工作下能处理的用户的数量
(5)了解系统的性能,让运维部门更好的规划系统的各种配置
3.确定性能测试的需求(性能指标,量化)
(1)关键性能指标的分析
例子:某电商交易系统,业务要求支持2亿用户(同一时刻1%的用户在线),每天支持2000万次交易量(交易的时间集中在早上8点到凌晨2点),交易响应时间要求在1s中之内。此外,高峰期系统的处理能力要求是平均值的3倍;本地交易响应时间正常低于1s,在高峰时可以高于1s,但是要在3s内。正常及交易成功率100%,在高峰期不能低于99.9%
这样的业务要求,作为测试人员,如何转化为可以性能测试可以验证的指标呢?
(2)关键业务的分析’
系统出问题,一般不是系统所有的功能出问题,而是一些关键的业务或者功能出了问题导致的。
1>在分析性能指标的时候,要选择用户频繁使用的功能;
2>计算量比较大的业务
4.常见的性能指标
(1)系统/事务的平均响应时间
(2)事务处理效率TPS
(3)吞吐率
(4)每秒点击次数
(5)服务器资源占用情况,内存和CPU使用率
(6)软、硬件配置是否合适(容量规划/硬件选型)
5.不同的维度衡量系统的性能
(1)研发人员
系统的架构是否合理,是否支持多线程并发这类操作
数据库设计是否合理(合理放入索引和合理的关联表关系)
算法,核心算法是否高效
设计和代码:是否存在不合理的线程同步方式和不合理的资源竞争
(2)系统运维人员
系统对资源的利用率,服务器(CPU,内存,磁盘,网络带宽等)的利用率和数据库的使用状况;
系统的容量:系统支持的最大用户数;
系统的稳定性:是否可以稳定运行,一天24小时;
系统的可扩展性,如果要进行扩容操作,系统可以支持;
(3)用户
使用起来是否舒适,响应是否速度快,稳定性好;
(4)性能测试人员
以上层面都需要关注
当系统性能无法达标时,关注引起系统性能的瓶颈;
6.性能指标
(1)并发用户数
业务层面的并发数:同一时刻向后端服务器发送请求的用户的数量;
后端服务器的并发数:同一时刻向后台服务器发送请求的数量;
(2)响应时间
指的是用户发送请求,到用户所期待的响应完全展示到前端所需要的时间;
前端响应时间
系统响应时间,服务器之间通信处理请求所需要的时间
(3)事务的响应时间
事务:指的是一系列密切相关的操作的集合
系统中完成一个事务的平均响应的时间
(4)每秒事务通过数
TPS 平均每秒处理的事务的数量
例子:过地铁检票机器,一台机器一秒可以通过一个人,一共有10台机器。
当有5个乘客的时候,每秒可以通过多少个人--->10(机器自己的能力,就是每秒通过是个人)
当有10个乘客的时候,每秒可以通过多少个人--->10
当有100个乘客的时候,每秒可以通过多少个人--->10
(5)点击率
每秒点击数代表用户每秒向web服务器提交的HTTP请求的个数
点击率越大,服务器的压力越大
(6)吞吐量
指的是单位时间系统处理的信息量
TPS,HPS(HTTP Per Second) ,bytes/Second
(7)思考时间
模拟用户实际操作的停顿时间
(8)资源利用率
系统在运行的时候资源的使用情况,包括CPU(一般不超过70%),内存,硬盘,网络等
7.模型
目的:当系统的性能不满足需求的时候,我们需要扩展系统的性能
#某地铁站进站只有3个刷卡机。
#人少的情况下,每位乘客很快就可以刷卡进站,假设进站需要1s。#乘客耐心有限,如果等待超过30min,就暴躁、唠叨,甚至放弃。
场景一:只有1名乘客进站时,这名乘客可以在1s的时间内完成进站,且只利用了一台刷卡机,剩余2台等待着。
场景二:只有2名乘客进站时,2名乘客仍都可以在1s的时间内完成进站,且利用了2台刷卡机,剩余1台等待着。
场景三:只有3名乘客进站时,3名乘客还能在1s的时间内完成进站,且利用了3台刷卡机,资源得到充分利用。
场景四: A 、 B 、 C 三名乘客进站,同时 D 、 E 、 F 乘客也要进站,因为 A 、 B 、 C 先到,所以 D 、 E 、 F 乘客需要排队。那么, A 、 B 、 C 乘客进站时间为1s,而 D 、 E 、 F 乘客必须等待1s,所以他们3位在进站的时间是2s。
场景五:假设这次进站一次来了9名乘客,有3名的"响应时间"为1s,有3名的"响应时间"为2s(等待1s+进站1s),还有3名的"响应时间"为3s(等待2s+进站1s)。
场景六:如果地铁正好在火车站,每名乘客都拿着大小不同的包,包太大导致卡在刷卡机堵塞,每名乘客的进站时间就会又不一样。刷卡机有加宽的和正常宽度的两种类型,那么拿大包的乘客可以通过加宽的刷卡机快速进站(增加带宽)。
场景七:进站的乘客越来越多,3台刷卡机已经无法满足需求,为了减少人流的积压,需要再多开几个刷卡机,增加进站的人流与速度(提升 TPS 、增大连接数)。
场景八:终于到了上班高峰时间了,乘客数量上升太快,现有的进站措施已经无法满足,越来越多的人开始抱怨、拥挤,情况越来越糟。单单增加刷卡机已经不行了,此时的乘客就相当于"请求",乘客不是在地铁进站排队,就是在站台排队等车,已经造成严重的"堵塞",那么增加发车频率(加快应用服务器、数据库的处理速度)、增加车厢数量(增加内存、增大吞吐量)、增加线路(增加服务的线程)、限流、分流等多种措施便应需而生。
8.性能测试的方法
(1)基准测试
系统的新版本,或者新接手的系统,需要进行基准测试,获得系统的性能指标,作为以后改善系统性能,或者保持系统性能d额基准。
进行基准测试不仅可以获取系统的基准性能指标,也可能会发现新系统的一些性能问题
(2)并发测试
同一时刻,向后端服务器发送请求,测试系统的表现,看系统是否会因为以后量大而出现资源竞争、死锁等问题。
(3)压力测试
压力测试一般指后端压力测试,不断向系统施加压力,看系统在长期处于临界饱和情况下,系统的稳定性以及系统性能指标的变化。
进行压力测试的时候会不断向系统增加符负载,使得系统长期处于高负荷情况,看系统在极限的情况下是否稳定,确定系统在极限情况下的CPU利用率,内存使用情况等其他指标。
(4)配置测试
系统配置在不同的配置上进行测试,找出能够使得系统的性能发挥最优的配置。
1>操作系统的配置 ---> linux Ubuntu Redhat
2>数据服务器的配置 ---> 读写,存储容量大
3>JVM配置
4>网络环境
5>服务器--->内存、磁盘等
(5)可靠性测试
验证系统长时间运行的稳定性
系统实际负载的70%左右,长时间运行,看系统是否运行稳定,指标是否稳定