一、什么是性能测试
性能测试就是测试软件性能方面的质量,它是一种非功能性的测试,它是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
二、为什么要学习性能
进行性能测试:是为了满足我们现实产品中的业务场景,支持大量用户的同时访问,高并发等业务的需求。
比如微信每天的在线人数:
它对我们的产品性能的提升主要是体现在以下几个方面:
提供系统的度量
jmeter 内存 CPU ;基本的度量单位 50% 30%
这些测试有助于对参数进行基准测试,如度量应用程序速度的响应时间,我们都知道功至关重要。这对于应用程序的性能比较是致关重要。
有助于评估应用程序的可扩展性
马士兵官网 每天访问量1W 后续的访问量达到2W 10W时
性能测试有助于检查应用程序是否有能力扩充更多的用户量。
有助于检查应用程序的健壮性
产品的时间通过压力测试,我们可以检查应用程序在工作负载高于预期或高于应用程序阈值时的稳健性。
有助于检查应用程序的可靠性
进行不同类型的性能测试是为了检查应用程序是否可靠,是否提供了正确的和一致的输出。性能测试,如负载测试和耐久测试,有助于评估系统在预期的工作负载下的正确性。
三、性能测试与功能测试的区别
功能测试:主要是关注的是我们的产品功能是否符合产品功能需求规格,主要是指我们产品的功能的正常用例和异常的用例,特殊的情况 (主要是关注的是我们的产品说明书上的,正常和异常的情况,以及我们特殊的情况)
性能测试:是在功能完成以后,我们主要是关注的是产品的各个指标(如,响应时间,cpu,内存,吞吐量等等)是否满足我们产品的业务需求场景。 (时间,资源)
1、性能测试和功能测试的区别?
测重点不一样
功能测试:主要是看我们的产品的实现的功能是否符合我们的产品文档以及产品文档所列出的正向和反向的用例
比如:我们登录我们马士兵官网
正确的用例:我们输入正常的用户名和密码,登录成功
错误的用例:输入正常的用户名和错误的密码,登录不成功
特殊情况:输入用户名带空格和正常的密码,是否登录成功
性能测试:主要看的是我们一些性能指标是否符合我们的产品文档
比如:我们登录我们马士兵官网
1W用户同时使用正确的用户名和密码登录,2S内登录成功时间
同时我们的服务器cpu使用率低于40% ,内存使用率低于50%资源
2、性能测试是在什么时候做?
性能测试,一定是在我们的功能测试完成以后才进行的测试
3、我们在做我们的产品的时候,我们只做功能不做性能可不可以?
如果说是你公司自己的用的系统,用的人数很少的情况下,可以不做性能
如果是商用的产品,用户量比较大的时候,这个性能是一定要做的。
4、性能测试主要是这几个方面进行考虑:
时间特性:用户发出请求到收到应答的这段时间
资源利用率:包括:cpu、内存、硬盘
服务器可靠性:指服务器能在相对高负载情况下持续的运行
可配置优化性:指服务器配置优化、业务逻辑优化、代码优化等
四、性能测试的分类(重点)
1、一般性能测试(基线测试)
在给产品系统施加较低压时,查看系统的运状况并记录相关数做为基础参考
基数线:对于电脑来说,cpu达到90% 内存到达70%会影响到性能
比如说:马士兵官 V2.0版本,模拟1W用户在我们的服务器上下订单服务,它的响应时间是2S ----这个就是我们的一般性能测试。它是做的一个参考的存在。
V3.0 模拟1W用户在我们的服务器上下订单服务 ,再看一下,它的一个响应时间8S,它的响应时间是不是有对应的性能问题
2、稳定性测试
通过给系统加载一定的业务压力(如CPU资源在70%~90%的使用率)的情况下,运行一段时间,检查系统是否稳定。
monkey测试 马士兵严选APP 下班之后去运行我们monkey
1000000 9分钟
10000000 90分钟
手机 --》 售后、性能(稳定性)
a、为什么要做稳定性能测试?
马士兵官网它能抗的住我们同时 1W用户同时下定单,那我们能保证长时间下订单吗?
3、负载测试
是通过逐渐增加系统的负载,测试系统性能的变化,并最终确定在满系统性能指标的情况下,系统所能承受的最大负载量的测试。 简之,负载测试是通过逐步加压的方式来确定系统的处理能力和能够承受的各项阈值
马士兵官网要求下订单不超过3s
100人下订单 1s
1000人下订单 2S
2000人下订单 2.5s
3000人下订单 3S
4000人下订单 3.5s
a、为什么要做负载测试呢?
举例说明:12306我们进行买票,平常我们买票是不是没问题,但是你能保证节假日,或者春节的时候,12306也能正常的运行吗?
4、压力测试
是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在什么负载条件下,处于失效状态,并获得系统能提供的最大服务级别的测试。压力测试是逐步增加负载,使系统某些资源达到饱和甚至失效
3000人下订单 —》4000–》5000
a、为什么要做压力测试?
软件在使用的过程中,用户量不是我们能控制的吧,是不是有可能超出我们的最大使用量该如何应对?
负载测试和我们的压力测试最大的区别在于什么?
负载测试是从我们最开始进行逐步增加
压力测试是从负载的基础上进行逐步增加
负载测试测试只是测出我们的产品最大的负载量,而我们的压力测试,是在逐步增加负载量的情况下,把我们的系统压跨
5、并发测试
测试多个用户同时访问同一个应用、在极短的时间内,发送多个请求,来验证服务器对并发的处理能力
a、为什么要做并发测试?
马士兵官网能抗住大量用户的访问,但是你能保证在我们马士兵官网上时的某一个商品时的秒杀时不出现问题吗?
五、性能测试的指标(重重点)
RT -Response time(响应时间)
系统处理能力也称吞吐量(HPS,TPS,QPS)
并发用户数量
错误率(例如千分之三,1000个里面有3个错误)
CPU
Memory(内存)
磁盘吞吐量
网络吞吐量
1、响应时间
从客户端发出请求到得到响应的整个时间,一般包括网络响应时间+server的响应时间。
注意我们并不关心客户端点击和客户端处理页面显示的时间。
用户接受准则:
例如2-5-10原则,即按照正常用户体验,如果用户能够在2秒内得到响应,会感觉速度很快,如果2-5秒得到响应,用户感觉系统的响应速度还不错,在5-10秒之内得到响应时,用户会感觉系统的响应速度慢,但是可以接受,超过10秒后还没有响应,用户就会感觉不能够接受。
行业参考标准:
不同行业不同业务可接受的响应时间是不同的,一般情况,对于在线实时交易:
互联网企业:500毫秒以下,例如淘宝业务10毫秒左右。
金融企业:1秒以下为佳,部分复杂业务3秒以下。
保险企业:3秒以下为佳。
制造业:5秒以下为佳。
2、系统处理能力(HPS,TPS,QPS)吞吐量
系统处理能力也叫我们的吞吐量,吞吐量是什么呢?
吞吐量是指系统在单位时间内(按照秒计算) 处理请求的数量。
对于单用户的系统,响应时间可以很好地度量系统的性能,但对于并发系统,通常需要用吞吐量作为性能指标。
一般情况下,用以下几个指标来度量:
HPS(Hits Per Second) :每秒点击次数,单位是次/秒。
TPS(Transaction per Second):系统每秒处理事务数,单位是笔/秒。
QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS,
如果是对一个接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么tps=qps,否则,tps≠qps
单业务多接口请求
每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。
标准
无论TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
金融行业:1000TPS~9000TPS,不包括互联网化的活动
保险行业:100TPS~1000TPS,不包括互联网化的活动
制造行业:10TPS~50TPS
互联网电子商务:10000TPS~1000000TPS
互联网中型网站:1000TPS~50000TPS
互联网小型网站:500TPS~10000TPS
3、并发用户数量
并发用户数量:同一时间 向服务器发送请求的用户数
常见的错误理解:
使用系统的全部用户数量(只是注册用户,存储在数据库中的数据)
使用系统的全部在线用户数量(登录成功后,在操作其他的任务,只是在线用户)
假如100w的注册用户数,10w的在线用户数,其中3w的用户在同时查看视频,则3w为并发用户数
正确理解
并发用户数指在同一时刻内,打开系统并进行业务操作的用户数量,并发用户数对于长连接(登录成功后,在系统频繁的操作业务)(数据库连接时长连接,web请求时短连接)系统来说最大并发用户数即是系统的并发接入能力。
对于短连接(登录成功后,不再管这个系统了)系统而言最大并发用户数并不等于系统的并发接入能力,而是与系统架构、系统处理能力等各种情况相关。
http:请求只能由客户端发出,服务端被动响应。
4、错误率
错误率指系统在负载情况下,失败交易的概率。错误率=(失败交易数/交易总数)*100%。稳定性较好的系统,其错误率应该由超时引起,即为超时率。
eg:马士兵官网下订单操作:下了100个订单其中1个订单错误,错误率是1%,其中100一定是在负载的情况下,即TPS为100次数/s
eg:TPS的最大处理请求能力为1w次/s,而发送了100个订单请求,成功了99个,错误了1个,这不叫错误率,叫bug。
超时率不会影响金额,影响不大。
互联网行业参考标准:
不同系统对错误率的要求不同,但一般不超出千分之3,即成功率不低于99.7%
5、CPU
中央处理器是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
1.CPU主频: 即CPU 时钟频率,频率的高低直接决定了CPU的性能强弱。 以GHz为单位,数值越高频率越高性能越强,同样功耗也更大。可通过超频即增加电压来提高CPU主频,但会增加发热以及不稳定性。
2.CPU位数: 指的就是处理器能够 一次性计算的浮点数的位数, 通常情况下,CPU的位数越高,CPU 进行运算时候的速度就会变得越快。现在普遍为64位芯片。
3.CPU缓存: 是 位于CPU与内存之间的临时存储器 ,它的容量比内存小的多但是交换速度却比内存要快得多一般来讲,CPU 的缓存可以分为一级缓存、二级缓存和三级缓存,缓存性能直接影响CPU处理性能。
4.CPU核心数: 指的是CPU上集中的处理数据的cpu核心个数, 核心数的数量多少直接影响CPU处理速度的快慢。
5.CPU线程数: CPU的几线程是 指同一个处理器上的多个线程同步执行并共享处理器的执行资源的线程数量, 几乎不用增加额外的成本就可以显著地提升效能。多线程技术可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间。总的来说线程数越多性能越为强大。
6.CPU制程: 指的是CPU的制程工艺,一般以纳米为单位。 数值越低可集成晶体管数越多,即性能越强大,所以说工艺制程的提升为性能提升提供了基础。并且更先进的制程也会减少发热降低功耗。
CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。CPU 利用率要低于业界警戒值范围之内,即小于或者等于75%;CPU sys%小于或者等于30%, CPU wait%小于或者等于5%。单核CPU也需遵循上述指标要求。
User表示:CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes)。典型的用户态空间程序有:Shells、数据库、web服务器……
System的含义与User相似。System表示:CPU花了多少比例的时间在内核空间运行。分配内存、IO操作、创建子进程……都是内核操作。这也表明,当IO操作频繁时,System参数会很高。
wait在计算机中,读写磁盘的操作远比CPU运行的速度要慢,CPU负载处理数据,而数据一般在磁盘上需要读到内存中才能处理。当CPU发起读写操作后,需要等着磁盘驱动器将数据读入内存(可参考:JAVA IO 以及 NIO 理解),从而导致CPU 在等待的这一段时间内无事可做。CPU处于这种等待状态的时间由Wait参数来衡量。
Idel表示:CPU处于空闲状态时间比例
6、Memory(内存)
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
7、磁盘吞吐量
磁盘吞吐量是指在无磁盘故障的情况下单位时间内通过磁盘的数据量。
磁盘指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的的重要依据,一般情况下,磁盘繁忙率要低于70%
8、网络吞吐量
网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。10M/s
网络吞吐量指标主要有每秒有多少兆流量进出,一般情况下不能超过设备或链路最大传输能力的70%。