lsekfe 发表于 2022-8-5 10:36:06

了解清楚什么是性能测试

一、什么是性能测试
  随着科技的发展,我们正在进入一个新时代:万物互联时代。在这个时代,网络的响应速度就尤为的重要,想要达到这个目的就需要用到我们本篇文章的主角-性能测试。那么,什么叫性能测试呢?
  性能测试是通过自动化的方式,对系统的各项性能指标进行定量或者定性的过程。性能测试的主要目的是为了识别软件应用程序中的性能瓶颈,主要包括负载测试、压力测试、峰值测试、耐久性测试、扩展性测试等类型。
  负载测试:检查应用程序在预期用户负载下执行的能力,目标是在软件应用程序上线前识别性能是否达到预期。
  压力测试:在极端负载下测试应用程序的执行能力,用以了解应用程序如何处理高流量、高并发的数据,确定应用程序的瓶颈。
  峰值测试:测试软件对用户产生的负载突然出现较大峰值的反应。
  耐久性测试:用于检查应用程序在长时间内处于高负载的情况下的执行能力。
  扩展性测试:确定软件应用程序在用户负载很大的情况下,是否可以进行动态扩展,有助于规划软件系统的扩容。
  二、何时开展性能测试
  通常软件测试被分为四个阶段:单元测试、集成测试、系统测试和验收测试。

那么问题来了,在哪个阶段开展性能测试更好呢?
  目前大部分的公司都是在集成测试完成后才开始进行性能测试,甚至有些中小型公司都是在系统测试完成以后才开始做性能测试,那么即使发现系统存在性能缺陷,在定位问题的时候也会非常费力。目前软件架构逐渐成熟,从最开始的单体架构逐渐到分布式架构,再到微服务,现在又在推广Serverless架构,导致软件架构越来越庞大。当一段因为使用了不当的算法而导致执行效率很低的代码藏身于一个庞大的系统中时,找出它是非常困难的。
  便于理解,我们先讲一个四叶草的故事:
  传说中的四叶草(Clover)是夏娃从天国伊甸园带到?地上,花语是幸福。?名三叶草。通常只有3瓣叶?,找到4瓣叶概率很?,找到5瓣叶的概率更低,找到6瓣叶的概率只有?万分之?,隐含得到幸福及上天眷顾。
  我也有一个梦想,找到一株四叶草,于是每次去公园都会在路边寻找,但是愿望至今还没有实现。首先四叶草很稀有,其次就算真的存在四叶草,在茫茫的三叶草丛中也很难被发现。
  我们把存在性能瓶颈的代码比作一株四叶草,整个系统比作一片草丛,如果草丛中只有孤零零的一株四叶草,或者周围只有几株三叶草,我们去找到这住四叶草的难度就很低,但是如果草丛中有茫茫多的三叶草,再去找到这株四叶草就非常困难。因为他们在某些形态上极其相似,导致定位困难。这种情况有啥好的解决办法呢?
  其实最好的方法就是尽早开始核心业务代码的性能测试,从算法和实现方式上就开始进行性能测试。如果每个代码段、每个核心算法、每个实现类的性能都是达标的,那整个系统的性能就不会差。
  三、哪些场景需要性能测试
  如果现在问大家,哪些场景需要性能测试?很多人张口就来:接口。没错接口肯定需要性能测试,理论上所有接口都需要做性能测试。除了接口以外,大家还有没有想到其他的呢?
  前面也提到了一些性能测试的点:代码段、核心算法、实现类,这些也是优先要考虑做性能测试的。但是还有一些场景经常被大家遗忘,但是又是一个很重要的环节,很多生产的问题都是出在这种环节,那就是中间件。
  目前软件开发为了提升性能,会引入各种中间件,例如:Kafka、RabbitMQ等等,这些中间件被大家广泛应用,它本身的性能也是得到了大家的认可,单机都能支持万级甚至十万级的吞吐量。于是很多人就直接拿来就用,往往问题总是出现在容易被忽略的中间件连接上。那么可以支持万级十万级的中间件,为啥还存在性能问题呢?
  带着疑问,我们还是先讲一个故事:
  大西北有一个李家村,村里有100户人家,整个村子都是以农耕为生,由于常年缺水,地里的庄稼收成很差,村民生活比较贫苦。距离该村子50公里外有一个天然湖泊,水量非常充足,如果可以把湖泊中的水引入到村里,就可以解决吃水的问题了。有一户比较富裕的人家,家主叫李有财,花费重金从湖泊开始铺设水管道,一直延伸到他家里,于是他家的水源问题解决了。其他村民也想效仿,但是碍于资金有限,于是村民们想到一个方案,修建一个蓄水池,将李有财家的水管直接接入蓄水池,再从蓄水池分发到各户人家了。该方案得到全村人的支持,据统计大概300立方的蓄水池就足够全村人正常用水了,于是全村筹资进行建造。蓄水池造好以后,全村傻眼了,根本没有解决吃水问题。由于上游只有一根水管,根本不足以将蓄水池装满,下游还连接着整个村子的所有住户,最后导致整个村子依然没有水。
  大家知道为啥吗?难道是300立方的蓄水池太小了?不足以支撑全村人用水吗?其实最根本的原因是水管道太小了,当初的铺设只是供1户人家的使用,现在需要供全村使用,肯定是不够的。
  根据上面的故事,我们把他联想到软件开发中来。中间件就像故事中的蓄水池,300立方的体积,如果蓄满水是足够全村使用的,同理,单机十万级吞吐量的中间件,本身的性能是足够支撑一个庞大的系统的,但是如果忽略了上下游的连接,就可能会导致出现严重的问题。
  所以,应用了中间件的场景,一定需要考虑做性能测试,每个中间件有成百个配置项,不同的配置项也会带来不同的性能结果。中间件本身的性能可以不用考虑,但是从上游到中间件,再到下游的整个链路一定不能忽视。


页: [1]
查看完整版本: 了解清楚什么是性能测试