1.性能测试基础
1)软件性能和性能测试
(1)软件性能定义:软件性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是完成该功能展示出来的及时性。
(2)性能测试定义:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
(3)测试时间顺序:接口测试 -> 功能测试 -> 性能测试
2)不同人眼中的软件性能
(1)用户眼中的性能
(2)开发眼中的性能
(3)测试眼中的性能
①测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
②测试人员在做性能测试时除了要关注表面现象(如响应时间),也要关注本质,比如服务器资源利用率,架构设计是否合理?代码是否合理等方方面面。
③服务器硬件性能
3)性能测试类型和相关术语
(1)负载:模拟业务操作对服务器造成压力的过程,比如模拟100个用户发帖。
(2)基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数据作为基础参考。
(3)负载测试Load Test:是指对系统不蹲地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等。
(4)压力测试Stress Test:压力测试是评估系统处于或超过预期负载时,系统的的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。响应时间可以慢一点,但不能出错。
(5)稳定性测试:在给系统在一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。一般要求持续时间7×24小时,但一般实际执行1×4.8小时
(6)并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时,是否存在死锁或其它性能问题。
4)性能测试应用场景
(1)性能测试应用场景主要有:能力验证、规划能力、性能调优、缺陷发现、性能基准比较
(2)通常某个性能场景中,需要联合使用多种性能测试方法一起进行性能测试
5)做好性能测试需要掌握的知识
(1)掌握一门编程语言
(2)掌握计算机原理和操作系统知识
(3)良好的网络基础
(4)掌握数据库知识
(5)中间件(apache、tomcat)
(6)常用抓包工具
(7)性能测试工具
2.性能测试指标
1)性能指标分类:
(1)系统指标(与用户场景和需求相关的指标)
(2)资源指标(与硬件消耗相关的指标)
2)系统指标
(1)响应时间
①响应时间:对一个请求做响应所需要的时间
响应时间 = 网络响应时间 + 应用程序响应时间 = (N1+N2+N3+N4)+(A1+A2+A3)
②平均响应时间:所有请求时间的平均值
例如:100个请求,其中98个耗时1ms,2个耗时100ms。
平均响应时间=(981+2100)/100=2.98ms
③百分位数响应时间
上面的平均响应时间不能反映服务器的整体效率,引申出百分位数。表示x%的请求都在某个响应时间以内,常用的百分位数有90%、95%、99%。
上例中95%的响应时间是1ms。
Jmeter中的聚合报告中,有响应时间的详细统计
响应时间和负载的关系,如下图所示:
(2)并发用户数
并发主要针对服务器而言,在同一时刻与服务器进行交互(指向服务器发出请求)
并发用户数:某一时刻同时向系统提交请求的用户数量,提交的请求可能是一个场景或功能,也可能是不同的场景或功能。
在线用户数:某段时间内访问系统的用户数量
系统用户数:系统注册的总用户数量
三者之间的关系:系统用户数 ≥ 在线用户数 ≥ 并发用户数
并发用户算法:
①公式法:
并发用户数C = nL/T(经验公式)
n:每天访问系统的用户数
L:在线用户从登录到退出的平均时间
T:考察时间长度(一天内多长时间有用户使用系统),一般取8或24小时
峰值C1,即最大并发数,计算公式:C1 = C + 3×C1/2
②计算法(比较靠谱)
假设业务量=用户数量=40万
业务量:40万*80% = 32万(二八原则,80%的用户在20%的时间内使用系统)
时间段:24小时×20% = 4.8小时(二八原则,80%的用户在20%的时间内使用系统)
每小时业务数量:32万/4.8小时 = 6.67万/小时
每秒业务量:66700/3600 = 18.53次/秒,平均每次请求时间1/18.53 = 0.053秒
每人每笔业务的处理时间是2秒(页面响应时间二五八原则),2/0.053=37.7个用户
小结:系统要达到40万的业务访问量,需要38个并发用户持续运行4.8小时,如果满足则性能测试通过。
③经验法
并发用户数 = 系统最大在线用户数×10%
(3)吞吐量
吞吐量是衡量网络性能的重要指标。
吞吐量是指系统在单位时间内处理请求的数量:
Throughput = (number of requests) / (total time)
对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,它能够说明系统的负载能力。
吞吐量和负载之间的关系:
(4)其它系统指标(了解)
①TPS&TQS
事物:事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程,以此来计算使用的时间和完成的事务个数
TPS:Transactions Per Second,每秒处理的事务数。可以衡量系统处理事物或交易的能力。
QPS:Queries Per Second,意思是每秒查询率,是一台服务器每秒能够响应的查询次数。QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。QSP是每秒的响应请求数,也即是最大吞吐能力。
QPS = req/sec = 请求数/秒 ≈ 并发数/平均响应时间
单台服务器的QPS一般为50-70次/秒。
②点击量&点击率
点击量:指Web Server收到的HTTP请求数。是衡量网站流量的一个指标。
点击率:Clicks Ratio,是指网站页面上某一内容被点击的次数与被显示次数之比,即clicks/views,它是一个百分比。反映了网页上某一内容的受关注程度,经常用来衡量广告的吸引程度。
区分鼠标的点击数:点击鼠标打开一个网页,如果网页有3个图片,向Web Server发送请求的点击数是:1+3=4,而鼠标点击数是1。
③PV&UV
PV:page view,页面浏览量或点点击量。用户每次对网站中的一个页面的请求或访问均被记录1个PV,用户对同一页面的多次访问,PV累计。PV用以衡量网页的访问数量,每日每个网站的总PV量是形容一个网站规模的重要指标。
UV:unique view,通过互联网访问、浏览这个网页的自然人。访问网站的一台电脑客户端被视为一个访客,在同一天内相同的客户端多次访问只被计算一次。
单台服务器每天PV计算:
公式1:每天总PV = QPS × 3600 × 6(6是每天小时数,规模越小的网站数字越小)
公式1:每天总PV = QPS × 3600 × 8(热门网站一般乘以8,京东、淘宝等)
3)资源指标
(1)通常需要关注的服务器资源:CPU、内存、磁盘、网络。
当资源占用超过50%预警,超过70%警告,超过80%需要处理。
性能测试时,需要监控服务器的硬件资源。
资源占用率和负载关系:
(2)中间件
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。
该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。
(3)数据库指标
应关注SQL,吞吐量,缓存命中率,连接数等。SQL语句执行时间,以毫秒为单位,吞吐量TPS,缓存命中率≥95%
(4)JVM
java虚拟机,为使java的代码可以编译运行在不同的平台上,仿真模拟各种计算机来实现。
(5)前端指标
前端应关注页面展示,即首次显示时间,页面数量,页面大小等
(6)load
系统平均负载,特定时间间隔内运行进程数,load与cpu核数一致
4)最佳用户并发数和最大并发用户数
(1)理发店模型
在我们的这个理发店中,我们事先做了如下的假设:
①理发店共有3名理发师;(系统资源、服务器)
②每位理发师剪一个发的时间都是1小时;(处理时间)
③我们顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时,而且等待时间越长,顾客的满意度越低。如果3个小时还不能剪完头发,我们的顾客会立马生气的走人。(用户可以容忍的系统响应时间为3小时,超过这个时间用户可能会重新请求或者不再请求)
(2)通过上面的假设我们不难想象出下面的场景:
场景一:
当理发店内只有1位顾客时,只需要有1名理发师为他提供服务,其他两名理发师可能继续等着,也可能会帮忙打打杂。1小时后,这位顾客剪完头发出门走了。那么在这1个小时里,整个理发店只服务了1位顾客,这位顾客花费在这次剪发的时间是1小时;
场景二:
当理发店内同时有两位顾客时,就会同时有两名理发师在为顾客服务,另外1位发呆或者打杂帮忙。仍然是1小时后,两位顾客剪完头发出门。在这1小时里,理发店服务了两位顾客,这两位顾客花费在剪发的时间均为1小时;
场景三:
很容易理解,当理发店内同时有三位顾客时,理发店可以在1小时内同时服务三位顾客,每位顾客花费在这次剪发的时间仍然是均为1小时;
从上面几个场景中我们可以发现,在理发店同时服务的顾客数量从1位增加到3位的过程中,随着顾客数量的增多,理发店的整体工作效率在提高,但是每位顾客在理发店内所呆的时间并未延长。(当并发用户数小于最佳并发用户数时,随着用户的增加,响应时间并不会增加,只是系统资源利用率增加了)
场景四:
不过随着理发店的生意越来越好,顾客也越来越多,新的场景出现了。假设有一次顾客A、B、C刚进理发店准备剪发,外面一推门又进来了顾客D、E、F。因为A、B、C三位顾客先到,所以D、E、F三位只好坐在长板凳上等着。1小时后,A、B、C三位剪完头发走了,他们每个人这次剪发所花费的时间均为1小时。可是D、E、F三位就没有这么好运,因为他们要先等A、B、C三位剪完才能剪,所以他们每个人这次剪发所花费的时间均为2小时——包括等待1小时和剪发1小时。
通过上面这个场景我们可以发现,对于理发店来说,都是每小时服务三位顾客——第1个小时是A、B、C,第二个小时是D、E、F;但是对于顾客D、E、F来说,“响应时间”延长了。(当并发用户超过最佳并发用户数,随着用户的增加,响应时间会变长)。
场景五:
在新的场景中,我们假设这次理发店里一次来了9位顾客,根据我们上面的场景,相信你不难推断,这9位顾客中有3位的“响应时间”为1小时,有3位的“响应时间”为2小时(等待1小时+剪发1小时),还有3位的“响应时间”为3小时(等待2小时+剪发1小时)——已经到达用户所能忍受的极限。假如在把这个场景中的顾客数量改为10,那么我们已经可以断定,一定会有1位顾客因为“响应时间”过长而无法忍受,最终离开理发店走了。
场景六:
假设这次理发店里一次来了10位顾客,根据上面的推算,必然存在一位顾客的“响应时间”为4个小时,而之前我们又做过假设3小时已经是顾客忍耐的极限了,所以这个顾客会因为无法忍受等待时间而离开理发店。
(3)通过以上6个场景我们可以得出以下结论:
①理发店每小时最多对3位顾客进行理发(最佳并发用户数)
②顾客最多等待3小时,如超过,将离开理发店(最大忍耐限度,响应时间最低要求)
③进来的顾客最多为9为,不会出现顾客离开(最大并发用户数)
④进来顾客超过3位时,每个顾客在理发店的时间是不太一样的(排队有先后的,这表明没有绝对的并发)
(4)性能模型图
在这张图中我们可以看到:
①最开始,随着并发用户数的增长,资源占用率和吞吐量会相应的增长,但是响应时间的变化不大;
②不过当并发用户数增长到一定程度后,资源占用达到饱和,吞吐量增长明显放缓甚至停止增长,而响应时间却进一步延长。
③如果并发用户数继续增长,你会发现软硬件资源占用继续维持在饱和状态,但是吞吐量开始下降,响应时间明显的超出了用户可接受的范围,并且最终导致用户放弃了这次请求甚至离开。
根据这种性能表现,图中划分了三个区域,分别是Light Load(较轻的压力)、Heavy Load(较重的压力)和Buckle Zone(用户无法忍受并放弃请求)。在Light Load和Heavy Load 两个区域交界处的并发用户数,我们称为“最佳并发用户数(The Optimum Number of Concurrent Users)”,而Heavy Load和Buckle Zone两个区域交界处的并发用户数则称为“最大并发用户数(The Maximum Number of Concurrent Users)”。
(5)系统需要保证:
①最佳并发用户数需要大于系统的平均负载
②系统的最大并发用户数要大于系统需要承受的峰值负载