• 0
  • 0
分享
  • 性能评估:性能测试与容量评估——软件测试圈
  • quinn 2022-08-31 13:46:49 字数 2378 阅读 4934 收藏 0

通常我们在谈论性能测试的时候,往往将性能测试分为压力测试和负载测试两大类去讨论,在设计性能测试方案和执行性能测试过程的时候,也是基于这两个角度去思考。在传统意义上,通过这两个手段去评估某个系统的性能表现已经很完美了。

但是随着大数据互联网、移动互联网等新兴概念的兴起,传统的性能测试概念、方法已经无法全面的引导我们开展性能测试工作。比如移动端的兴起与广泛应用,移动端的性能也是性能测试的范围;再比如如何评估系统扩展性、弹性性能表现相关的容量测试,也要我们去关注。因为公司最近做服务端容量的相关工作,因此我们就性能测试,容量评估两个角度去重新定义性能测试的工作范围和职责。

1.png

1、性能测试

性能测试的最终目的是评估系统的吞吐量(TPS),因此我们从测试中经常见到的跟吞吐量(TPS)有关的三个图展开讨论。

2.png

图1很好的描述了压力测试的过程(VUSER是因,TPS是果)。理论上来讲,对一个健康的系统进行压力测试时,随着并发数的增加,系统吞吐量呈递增趋势,一直到系统处理能力达到饱和的时候,系统吞吐量保持在一个数字(t点)保持不变。但是,对于存在性能缺陷的系统,它的表现往往不是这样,可能因为网络、服务器、中间件的配置;软件设计、实现方面的缺陷,当吞吐量到达t点的时候,吞吐量不再数字t保持稳定,而是出现波动,因此,我们在做性能测试的时候,吞吐量曲线不是这个状态,系统肯定存在性能缺陷,我们应该具有分析这种情况的能力。

那么,我们根据图1的结果,是不是可以得出下面两个结论:

①系统的最大吞吐量是t ?

②系统的最优并发数是a ?

答案是否定的。因为,我们在定义软件的性能需求时候,往往说我们系统要支持多少个并发,吞吐量要达到多少,忽略了几个很重要的指标,如响应时间(SLA),稳定性,硬件资源,网络等。如果说,我们不考虑响应时间等因素,上面两个是无误的。

3.png

图2很好的论证的前面两个结论的不足之处,随着并发数的持续增加,系统的处理时间也越来越长,上图中,如果说t2是用户可接受的时效,那么当用户量超过v2时,那么我们系统就有了性能缺陷。

在互联网上对于用户响应时间,有一个普遍的标准。2/5/8秒原则。也就是说,在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。在5秒之内响应客户被认为“比较不错”的用户体验,在8秒内给用户响应被认为“糟糕”的用户体验。如果超过8秒还没有得到响应,那么大多用户会认为这次请求是失败的。

对于任何程序,它的运行离不开硬件环境。目前流行的研发框架下一个健康的程序,随着硬件资源的递增,其处理能力也会呈递增的状态,比如说,CPU密集型的程序,我们在提高CPU数据或者CPU处理能力时,其吞吐量肯定会递增;IO密集型的程序,提供IO处理能力强的设备,其吞吐量肯定会递增。基于上面三个图,尤其是第三个,我们引出容量评估的概念,作为性能评估工作的补充。

2、容量评估

如果说,性能测试过程帮助我们评测出当前系统的处理能力,那么容量评估跟性能恰恰相反,它解决我们要如何做,才能使系统达到更高的吞吐能力。

电商,O2O等行业的发展,各种促销活动也应用而生,促销活动带来系统压力也呈量级增长。任何一个健康的系统,自身处理能力当然是有限的,尽管我们通过性能测试获得了一些数据,但是这些数据的价值大打折扣。因为我们经常会遇到下面的问题:

  • 系统单个节点的处理能力是多少?

  • 这个活动我们要XXX的TPS,我们应该怎么扩容?

  • 目前这个流量,生产上是不是有资源浪费?

显然,传统意义上的性能测试无法回答上面的问题,这时候容量评估就显的很有意义了,下面,我们就上面提到的三个问题展开讨论。

我们在做容量评估之前,必须考虑下面几个问题:

  • 这个系统架构适合做容量评估吗?

  • 我们怎么做容量评估?

  • 容量评估的产出是什么?

在系统没有明显瓶颈的情况下,要扩展它的服务能力,无怪乎只有两种方法,垂直扩展和水平扩展。垂直扩展意思是我们提升硬件配置,CPU密集型的服务,如加解密相关应用,我们提升CPU的处理能力,IO密集型的服务,我们提升IO处理能力。再者就是水平扩展,就是通过加机器或者加节点的办法提高容量,如果通过这两个手段,系统容量都没有提升,那么对这样的系统做容量规划是无意义的。那么,容量工作该怎么进行呢?

第一步:确认容量目标和约束条件。目标是如何通过水平,垂直的方式提供最经济的扩容方案。监控以及容灾的保障型工作,对其服务能力也有诸多制约,我们要结合这些制约条件进行容量的工作。

4.png

第二步:确定容量指标。容量指标主要用作衡量服务器的处理能力。

容量指标的选取原则:

  • 线下(上)数据可采集;

  • 能够客观反映服务器处理能力。

作为容量指标,需要通过线下(上)监控获取统计数据,其历史数据用于计算集群的实际负荷,而通过压测获得集群的最大处理能力。如上所说,CPU密集型集群常选TPS作为容量指标,而存储型集群常选流量作为容量指标。

第三步:通过压力测试获取基础数据。通过压力测试的方式,评估系统在横向扩展、纵向扩展时候容量的表现,寻找系统短板,通过扩容的方式看容量表现,通过压测采集基础数据,数学建模的方式,绘制出系统容量的变化曲线,用来指导大流量活动时如何扩容。

第四步:线上监控结果分析。线上监控用于收集集群历史数据,计算集群的实际负荷,也可以对容量工作提供原始数据。根据集群的特点和之前性能测试经验关注容量指标和约束条件的业务和资源指标。而这里的历史数据,是需要长期的采集和整理。

第五步:根据收集到的数据,进行趋势预测。预测结果并非是个准确的数字。

通过上面的工作,我们手头数据积累,以及我们拥有的经验,包括直觉,可以较为准确的对扩容提供方案,也有能力回答前面提出的三个问题。


作者:软件测试高质量人

原文链接:https://blog.csdn.net/Maggie97/article/details/122212124

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 测试人员进行的测试活动,不是仅限于版本上线前的测试,版本上线后,我们的测试工作依然在继续,只不过测试环境变成了线上环境,测试力度变为走查形式,一些异常或者特殊场景等会相应减少,但是常用功能和正向流程一个都不能少。以下来简单拆解下线上走查的一些注意事项。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~测试走查,是我们每个测试工程师的日常工作:版本迭代前,通过需求评审,发现现有功能的已知问题;版本进行中,通过测试设计,审视当前测试方案存在的没考虑全的问题;或者开发的设计方案漏洞版本开发时,通过用例评审和迭代测试,审...
            1 0 5791
            分享
          •  不知道大家有没有同感,做接口测试麻烦的不是测试本身,而是接口它会变,更麻烦的不是接口变了,而是它变了而你不知道。等到你测完,开发才悠悠跟你说——“那个接口我改了点东西,你再看一眼哈”。我那是看一眼的工作量吗? 我得review一遍看影响到哪些接口,再根据影响到的接口,查看并修改对应的接口用例,调用链下游的用例,该改的改,改完再跑一次接口测试。——这意味着已经做完的工作又要来推翻重来一遍,我本来已经干完活儿悠哉摸鱼了,现在得加班了,我那40米大刀已经举起来你看到了没?吐槽归吐槽,但人真的不是精密的机器没法保证一直不出错。即便我们组内“服务好下游,承接好上游,不拖后腿,不坑队友”已经是...
            8 8 756
            分享
          •   互联网时代,各类产品层出不穷,企业要想站稳市场,获取用户信任度,就要以“质”取胜。各企业也认识到软件测试的广度与深度将直接决定了企业的未来,产品的质量才是企业站稳脚跟的关键。软件测试这个行业到底好不好,单从培训机构的数量就能看出来,光是西安这座城市,相关培训机构的数量就有一百多家,全国范围来看数量更是惊人,如果这个行业不好,那为什么会有这么多家相关培训机构拔地而起呢?转行人数的不断增加也印证了软件测试的行业的前景大好,那么这个行业到底如何,小编就结合相关数据来分析一下!  薪资待遇  但由于前几年国内对软件测试的重视度不够,各高校也没有专门的课程来培养这方面的人才,所以目前软件测试工程师有...
            0 0 560
            分享
          •   面试的时候,被问到你会搭建测试环境吗?相信很多人的都会感觉脑子一下一片空白,或者星星点点,不知道从何说起。  一方面不知道面试官问这个问题的意图是什么?也不知道他想得到的答案是什么?更加不知道该从哪些方面来回答。  作为一个测试行业从业8年有余的测试人员,我想跟大家分享一些我的经验和看法。  首先,毋庸置疑的是,面试官问这个问题,想要得到的是你肯定的答案,希望你是一个会搭建测试环境的优秀测试工程师。  QA不管是做什么类型的测试,最基础的功能测试,需要搭建测试环境;进阶部分的性能压力测试,对搭建环境的要求更高。  所以搭建测试环境是优秀测试工程师的必备技能之一,也是QA开展测试工作的前置条...
            0 0 958
            分享
          • 最近在使用 Python3.4 做一些脚本实现,发现对于编码的处理上和 Python2.6 有很大的不同,就此机会把相关知识做个梳理,方便需要的时候查阅。先说下概念和差异: 脚本字符编码:就是解释器解释脚本文件时使用的编码格式,可以通过 # -\*- coding: utf-8 -\*- 显式指定解释器字符编码:解释器内部逻辑过程中对 str 类型进行处理时使用的编码格式Python2 中默认把脚步文件使用 ASCII 来处理(历史原因请 Google)Python2 中字符串除了 str 还有 Unicode,可以用 decode 和 encode 相互转换Python3 中默认把脚步文...
            1 3 1412
            分享
      • 51testing软件测试圈微信