谈谈你所理解的性能测试
性能测试
- 系统开发完毕了,去做一下性能测试吧!
- 系统要验收了,做一下压力测试吧!
当听到以上的要求后,是否一脸茫然?那么我们该怎样进行一次性能测试呢?
一.性能测试基础
1.为什么进行性能测试?
- 应用程序是否能够很快的响应用户的要求?
- 应用程序是否能处理预期的用户负载并有盈余能力?
- 应用程序是否能处理业务所需要的事务数量?(这里的事务代表一系列紧密的集合,例如你的业务为购物,那么你的事务就包含:登录,选择商品,加入购物车,支付)
- 在预期和非预期的用户负载下,应用程序是否可以稳定执行?
- 是否能确保用户在真正使用软件时获得舒服的体验?
误区:提高一下硬件配置就可以提高软件的性能了,因此性能测试不重要?
答:错误,例如软件本身的问题内存泄露。①内存泄漏就会导致没有使用的内存无法被程序正常释放,很多的内存泄漏最终将造成内存溢出,然后让机器的性能下降 ②数据结构中有很多算法,我们选择一些算法的时候就要考虑它的时间复杂度,空间复杂度,因此算法的好坏,也决定了系统的性能响应时间等等,因此不仅仅提高一下硬件配置就可以提高性能了,要从多个方面去考虑。
2.性能测试关注什么?
- 并发用户数 / 吞吐量
- 平均响应时间
- 服务器资源占用情况
- 可靠性、可扩展性
- 软、硬件配置是否合理(容量规划 / 硬件选型)
3.谁关注性能测试?
(1)开发人员(算法复杂度,内存泄漏,线程安全(高并发场景),资源占用问题)
- 系统架构师:架构设计是否合理?
- 数据库设计:数据库设计是否存在问题?
- 代码:代码是否存在性能问题?系统中是否存在不合理的内存使用方式?
- 设计和代码:系统中是否存在不合理的线程同步方式和不合理的资源竞争情况?
(2)系统管理人员(操作系统、网络、服务器等等)(注重系统稳定性)
- 资源利用率:应用服务器和数据库资源使用状况合理吗?
- 系统容量:系统最多能支持多少并发用户的同时访问?系统最大的业务处理量是多少?
- 系统稳定性:系统是否能支持 7X24 小时的业务访问?
- 系统可扩展性:系统是否能够实现扩展?系统性能可能的瓶颈在哪里?更换哪些设备能够提高系统性能?
(3)用户(注重响应时间)
- 响应时间:过长时间的等待会让使用者烦躁不安
对于一般的 web 网站来说,在欧美国家普遍的标准为原则 3/5/8(2/5/10):
3 秒钟用户会觉得是一个很好的体验
5 秒钟用户可能会觉得差了一点,还行,比较好
8 秒钟是用户所能承受的最大极限
系统稳定性:出现 HTTP500 错误或数据库崩溃会让用户对系统失去信心
(4)业务人员
- 参数:如何向用户提供参数,例如支持多少用户使用?响应时间是多少?
(5)测试人员
- 以上所有层面都需要关注
- 是否能够发现系统中存在的瓶颈?
- 是否可以真实有效的评估系统
3.什么时候进行性能测试?
- 功能测试中后期(因为功能都没有完成的话,还需要性能测试吗?)
误区:性能测试在其他测试完成后,测试一下就可以了
开发时就要测试:白盒测试,开发人员关注系统的性能方面
开发完成后测试:黑盒测试,在功能测试中后期进行测试
4.总结
性能测试主要关注:响应时间,可靠性,可扩展性,并发处理的事务数量,负载盈余,软硬件配置,资源的利用率
二.概念和术语介绍
1.性能测试
性能测试是通过自动化的测试工具,模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
系统的性能是一个很大的概念,对一个软件系统而言包括执行效率、资源占用率、稳定性、安全性、兼容性、可扩展性、可靠性等等。
性能测试主要用来保证产品上线或发布后系统的性能满足用户需求,性能测试在软件质量保证中起重要作用。
广义:在同一个时间段内,不同的用户使用系统不同的功能,给系统造成的压力。
狭义:在同一个时间段内,不同的用户使用系统相同的功能,给系统造成的压力( LR 就是采用这种狭义的概念)。
2.并发数
- 系统用户数:就是该系统的注册用户数。例如,BestTest 论坛里存在 6666个注册用户,他们可以是活跃的,也可以是僵尸的。
- 在线用户数:即当前正在登录系统的用户数。例如,其中有 666 个用户的状态为在线,但在线用户并不一定都会对服务器产生压力,因为有的用户登录后什么都不干。
- 并发用户数:是对服务器产生压力的用户。例如,可能在线的 666 个用户中,有 20% 的用户对服务器产生了压力,这 20% 的用户数就是并发用户数。(同一时间进行不同操作的用户数)
严格意义的并发用户数:同一时间进行同一操作的用户数。
3.响应时间
又叫请求响应时间:TTLB(time to last byte),对请求作出响应所需要的时间。
用户的反应时间+网络传输(请求)时间+服务器处理(一层或多层)的时间+数据库处理(一层或多层)的时间+网络传输(响应)时间+用户反应时间
3.事务响应时间(Transaction Reponse Time)
事务是指一组紧密相关的操作集合。例如一次登录可能包含了多次 HTTP 请求,如:判断用户是否存在?密码是否正确?是否已登录?登录?等多个 HTTP 请求。
4.每秒事务通过数(Transaction Per Second)
TPS 是指系统每秒能够处理的事务数,它是衡量系统处理能力的重要指标。
当压力加大时,TPS 曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈了。
地铁检票机:
只有十台进站检票的机器,一台机器一秒能进一个人
并发用户数为5,则TPS 为 5 (每秒系统可以处理5个事务)
并发用户数为10,则TPS 为 10 (每秒系统可以处理10个事务)
并发用户数为100,则TPS 任然为 10 (每秒系统可以处理10个事务)
5.点击率(Hit Per Second)
每秒点击数代表用户每秒向 Web 服务器提交的 HTTP 请求数。点击率越大,服务器压力越大。这里的点击并不是鼠标的一次点击,一次点击可能有多次 HTTP 请求。
6.吞吐量(Throughput)
单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力,一般来说吞吐率用 请求数/秒 或是 页面数/秒 来衡量,从业务的角度,也可以用访问人数/天或是处理的业务数/小时来衡量,从网络的角度来说,也可以用字节数/天来衡量。
- 吞吐率:单位时间内系统处理的用户的请求数量(单位时间内的吞吐量)
- 吞吐量:一段时间内系统处理的用户的请求数量
7.思考时间(Think Time)
思考时间就是用户进行操作时,每个请求或者操作之间的间隔时间,是为了更加真实地模拟用户的操作场景。
8.资源利用率(=资源实际利用量 / 总的资源量)
不同系统资源的使用情况,例如 CPU, Memory,磁盘,网络。
三.性能测试模型
1)X轴代表并发用户数,Y轴代表资源利用率、吞吐率、响应时间。X轴与Y轴区域从左往右分别是轻压力区、重压力区、拐点区。
2)随着并发用户数的增加,在轻压力区的响应时间变化不大,比较平缓,进入重压力区后呈现增长的趋势,最后进入拐点区后倾斜率增大,响应时间急剧增加。
3)接着看吞吐率,随着并发用户数的增加,吞吐率增加,进入重压力区后逐步平稳,说明系统已经达到了处理极限。
4)同理,随着并发用户数的增加,资源利用率逐步上升,最后达到饱和状态。
5)最后,把所有指标融合到一起来分析,随着并发用户数的增加,吞吐率与资源利用率增加,说明系统在积极处理,所以响应时间增加的并不明显,处于比较好的状态。但随着并发用户数的持续增加,压力也在持续加大,吞吐
率与资源利用率都达到了饱和状态,造成响应时间急剧增长。轻压力区与重压力区的交界点是系统的最佳并发用户数,因为各种资源都得到充分利用,响应也很快,而重压力区与拐点区的交界点就是系统的最大并发用户数,因为超过这个点,系统性能将会急剧下降甚至崩溃。
四.性能测试分类
1.基准测试
有基础的标准,这样能通过对比发现系统的不同点与变化。
应用于以下场景:
1)可以在制定的标准下通过基准测试建立一个性能基准,这样以后当系统的环境、参数发生变化之后,再进行一次相同标准下的测试,即可看出(系统环境、参数)变化对性能的影响。
2)系统进行基准测试可以在较早的阶段发现性能问题。
3)某系统若从来没有进行过任何性能测试,需要对该系统做一次性能评估(基准测试)作为后续开发调优的参考。
2.负载测试(并发测试(针对并发用户数),容量测试(针对数据库的数据量))
①并发测试:可以得到系统可以承受的最大用户数
②容量测试:可以得到数据库的最大容量
负载测试是在被测系统上不断增加压力,直到各项指标达到饱和,例如 “响应时间” 超过预定指标,或者某种资源使用已经达到饱和状态。这种测试方法可以找到系统的处理极限,为系统调优提供数据。
3.压力测试(强度测试)
压力测试就是在系统的拐点(例如:最大用户数,数据库的最大容量)之上进行的一种测试,测试系统是否会出现错误,测试系统运行是否稳定。
压力测试是测试系统在一定的饱和状态下,例如 cpu、内存 等在饱和使用状态下,系统能够处理的会话能力,以及系统是否会出现错误。压力测试与负载测试有些类似,经常把负载测试描述成压力测试的一种场景,例如增加用户数对系统进行压力测试。压力测试的目的是为了揭露高负载下的问题,例如资源竞争、同步问题、内存泄漏等。
- 负载测试和压力测试两者可以结合进行。
- 负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
- 压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
4.并发测试
并发测试是通过模拟用户的并发访问,测试多用户并发访问同一个应用,同一个模块或者数据记录时,是否存在死锁或者其他性能问题。
5.配置测试
配置测试是通过被测系统的软/硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到各项资源的最优分配原则。例如在测试执行时更换、扩充硬件设备,调整网络环境、调整应用服务器和数据库服务器的参数设置,比较每次测试结果,从而确定各个因素对系统性能的影响。
6.可靠性测试(疲劳测试)
可靠性测试是通过给系统加载一定的业务压力(例如资源在70%-90%的使用率)的情况下,让应用系统持续运行一段时间,测试系统在这种条件下是否可以稳定运行。(又叫疲劳测试,运行时间比较长)
7.大数据量测试
主要针对数据库的一种测试。
本文地址:https://blog.csdn.net/HU1656/article/details/107575099