性能测试之初阶浅聊 1 [性能测试分类 性能测试工具 性能测试监控] 最全面的性能测试知识体系讲解

目录

性能测试是什么 or 什么是性能测试

性能测试分类

性能测试工具

性能测试目的

性能测试指标


性能测试是什么 or 什么是性能测试

性能测试其实我们是测试软件的性能,这好像是一句废话,但是软件的性能本身,它是一个非功能特性,它关注的不是软件能否完成特定的功能,不是业务,而是在完成这个功能时候展示出来的及时性能不能够正常地、快速地给客户显示。所以也由于它的这个特征,非功能特性的特征,所以它介入的时机,我们在做性能测试的时候,是在功能测试完成以后。同时性能本身也是一种指标可以用一些时间或者 TPS 等等其他的指标来衡量,通常我们会使用某些工具或者手段来检测软件的某些特定指标是否达到了要求,这就是性能测试


性能测试分类

  • 负载测试

负载测试是干什么用的?它是侧重于确定当前测试中的系统或者是我们的应用软件在工作负载条件下,或者在实际运行阶段加载预期的容量系统或者应用软件所具备的相关的性能特性。然后我们通过逐步地增加系统负载,测试系统性能的变化,并且最终确定在满足性能指标的情况下,系统所能承载的最大的负载量所以负载测试是逐步加压,确定系统能够承受的各项阀值

例如: 我们需要测试一个购物系统,登陆响应时间不超过3秒,那么久不管并发是多大,在这个响应时间的阀值下,测试人员告诉需求方最下的基准值是多少就可以了,比如说200并发?我并发下来,我看到平均响应时间在 0.5 秒。好,我开始往上加,我加到200,加到300,我这是 100-100 加啊,比如说我到 1000 了,我的平均响应时间达到了 2.2 秒,我说不能再加这么多了,可能快到平静了,怎么办? 50-50 的加,我这样能够找出来系统,我的响应时间在 3 秒之内。我的整个的最大能力,我最大能够接受 2000 的并发, 2500 的并发,这是负载测试。

  • 压力测试

是确定当系统或者应用软件在某些超过实际运行阶段所预期的条件下所具备的性能特征。它跟前面的负载测试有相似的地方,就是我们逐步增加系统负载。但是不一样的是在负载测试的时候我们有一个条件,就是我们有一个系统能够正常运行的条件,比如平均响应时间 3 秒,我测试到它的最大并发值,而压力测试不是?它是让系统某些资源达到饱和,达到失效的那个边缘

例如:我们在负载测试一个系统的时候,系统马上挂了,比如说3000的并发,我现在非常非常慢了,平均响应时间已经到达 6 秒 7 秒了,但是还没挂, CPU 也没有打满,数据库的内存也没有打满,各方面资源都没有打满,怎么办?我继续压,我压到 3400 3500,服务器 CPU 达到 100% 了对吧?没办法,机器再大,我的连接数打爆了,OK,这是我的系统的最大的峰值,这是压力测试要做的事情,看不太一样,所以压力测试的目的是发现在什么条件下系统的性能变得完全不可以接受了,并且通过对应用程序施加越来越大的负载,直到发现应用程序性能下降的那个拐点。所以我们在进行压力测试的时候,是来确定在哪些条件下,在什么条件下应用软件会发生问题,产生什么样的问题,这就是压力测试和负载测试的不一样。

  • 容量测试

再满足性能目标的前提下,系统能够最大处理的最大的会话能力,确定系统可以处理同时在线的最大用户数。容量测试确定了服务器的极限时效点,同时监控在各种不同负载和流量模式下它的一个性能结果。什么意思?就是说容量测试往往是在刚才咱们说的负载测试和我们的压力测试中间,那这个中间的意思是我选取一个,比如我要服务器达到80%,超过 80% 了,我服务器就会逐渐的变慢,直到服务 down 掉,或者连接数会逐渐的变大。我要求我的并发数,在一定的并发数下,我最终我这个 CPU 达到 80% 以下,或者我的内存达到 70% 以下,我有一个极限的失效点,在这个失效点前我能够处理的最大的用户数,这是我的容量措施,就是说在这个失效点前我还可以接受。

  • 配置测试

配置测试很简单,其实就是我加载同样的类似的并发,比如我这个系统我要承受 2000 并发,我加载 2000 并发,然后我修改配置,我找出最好最优的配置项,包括比如说连接池的连接数,包括我的 JVM 的一些配置等等,这些我都可以算作配置测试它是不是性能测试,也是,我是用性能来找到最优的配置存在。

  • 并发测试

并发测试就是刚刚我们说的我就生生的 50 并发,我开始压,我看看结果是多少。这就是说我们测试多个用户同时访问一个应用,同一个模块或者数据记录池,是否存在着死锁或者其他的性能问题。几乎所有的性能测试都会涉及到并发,只是我们的并发模式不一样,我的并发测试是 50 或者我,我来找问题对不对?而其他的都是我逐步加压,我找到一个平静值,找到一个极限值,这是不一样的。

  • 可靠性测试

可靠性测试其实是一个偏持久性测试,就是说我在给系统加载一定的业务压力的情况下运行一段时间。通常我们在这个最早的时候,我刚刚工作做性能测试的时候,我们说的一段时间大概都是三个小时左右。后来到了互联网,发现互联网里说的一段时间可能是在一定的病发下跑上它三天三夜,所以这个一段时间是不太固定的,需要根据你自己的系统你的情况来分析。那这个可靠性测试最终目的是为了检测出系统是否具有一些内存泄漏的问题,因为长时间跑你才能够看到一些 GC 的日志。

  • 稳定性测试

稳定性测试主要是说在复杂多变的环境下,系统所能提供的从可靠性、健壮性、功能数据完整性、有效性及响应的连续性,其实它也是跑一定的时间,但是大多数稳定性测试都是在类生产环境,就是跟生产环境完全一致的环境,我们看看它有多大的稳定性能。


性能测试工具

  1. 我们使用最多的性能测试工具就是Jmeter,因为这玩意就是开源的,同时这个工具的最底层是java,也方便做二次开发,同时作为工具也是比较好用的。包括网上的一些开源工具,都是以jmeter作为测试内核也就是底层做的二次开发,比如说meterspher。 
  2. 上一代的测试工具也就是loadrunner,loadrunner性能测试的好处底层是c,所以它受到java的一些本身机制在java受到的影响是比较小的而且它的并发效率比较高。 但是同样的LR就是一大大型的开源工具,再者就是它不开源,还有就是LR本身很重,有几个G,这也是在某些方面不好用的原因。 
  3. 还有就是python的一些性能测试工具 locust,这个比较轻量化,但是他本质的内核是异步协程,所以并发效率较大。 
  4. 最后我觉得就是使用代码的方式进行编写性能测试脚本,进行性能测试,这样灵活性很好,但是需要一定的学习成本。 

总结: 我们总体是根据前面说的那几种场景,我要做什么?我要做负载测试。我要做什么?我要做压力测试?我要做什么?我要做容量测试?我要做什么?我要做配置测试?我根据不同的测试,我要制定不同的规则,我按照什么样的方式加压,我的场景是怎么样选择的?工具不一样,但是思路没有任何区别。


性能测试目的

很多人其实都存在着这样的问题,就是我说性能的测试,我直接压测完不就知道了吗?我用监控干什么?实际上我们性能监控是性能测试过程里非常非常重要的一个环节,我们当在压测的过程中出现性能瓶颈的时候,需要综合详细的监控数据对问题进行分析。那整个系统架构里面的每一个节点都需要做监控,包括我们的压力机,我们的网络、各个中间件,各个服务器的硬件资源,甚至是 Java 虚拟机、数据库等等。只有性能监控做好了,才能帮助我们快速找到并且定位问题,找到系统的性能瓶颈。那我们需要做些什么呢?来帮助我们去监控呢?或者说哪些指标才是我们监控的关键指标呢?在回答这个问题之前,我们先一起来想一下软件需要进行性能测试的目的到底是什么?

目的:

有这么三点,

第一,评价当前系统的性能,那判断我们的系统能不能符合预期的性能需求。比如有一个产品经理说我们要做这个产品,我们预期要支持 100 万的并发,OK,你要评价对吧?包括我们也是,我们有集五福,对吧?支付宝的集五福活动,双十一活动产品会每次来说我会有多么大的数据量,多么大的一个流量进来,你评估能不能够支持,这是你做性能测试的目的,对吧?

第二,寻找软件系统可能存在的性能问题,定位这个性能瓶颈,并且解决问题。

第三,判定我们的当前的系统,它的一个性能表现,预见我们系统负载压力的承受力,在应用部署之前或者上线之前,评估一下我们系统的性能状况,这是我们软件测试的目的,这是我们软件性能测试的目的。

系统关注点: 那如果换个角度来翻译一下,其实我们关注的是系统的三个方面能力。

第一系统上线之前,我们考虑它是否能够满足上线性能的要求?

第二就是上线之后,上线了以后的线上系统,它的极限承载怎么样?

第三它的系统的稳定性又如何?

无外乎性能测试的最终方向就是解决这么三个问题。由此,要达到以上目的,并且回答用户的这些关注点,就必须首先执行性能测试,并且明确需要收集监控哪些关键指标。


*性能测试指标*

应用性能指标

我们要解决性能测试的关注点,那么我们就要知道性能测试指标包含哪些了?

我们可以把关注的资源分成两大类

  1. 系统指标
  2. 资源指标

小聊: 系统指标和用户场景和需求是直接相关的,包括什么用户的并发数,讲时间,事物的成功率,超时的错误等等,具体还有其它的指标需要在需求开始的时候进行预判。 

大聊: 那对于应用的性能指标监控,我们最重要的就是这四项,那并发的用户数、响应时间、事物的成功率、超时的错误率。当然还有一些跟这些指标相关的,比如TPS,吞吐量,它们都是基于响应时间和并发任务数计算出来的。这些指标帮助我们在性能测试的过程中非常直观地衡量出一个系统性能好与坏。现有的性能测试工具,jmeter loadrunner locust 都可以相对直观的查看到性能测试指标,至于编写性能测试脚本,也可以通过日志读取方式,以及计算方式进行相关指标的参数产出。

细聊:

  • 并发用户数:   

小聊: 资源指标则是与硬件资源的消耗直接相关,那就包括了服务器的CPU、内存、IO、网络带宽。当然还有更细节的资源指标,比如数据库的这个处理速度,那数据库的 IO 包括 JVM 内存处理的细节等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值