• 0
  • 0
分享
  • 性能评估:性能测试与容量评估——软件测试圈
  • quinn 2022-08-31 13:46:49 字数 2378 阅读 6057 收藏 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 环境:OS:Windows 10 17134Python:3.4.4Selenium:3.13.0Browser:68.0.3440.84(正式版本) (64 位)ChromeDriver:2.41脚本内容:# -*- coding: utf-8 -*-""" 测试 selenium webdriver """import timefrom selenium import webdriverdef test():  ...
            1 2 2417
            分享
          •   Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户。  Locust并不小众,从它Github的Star数量就可见一斑:  链接:github.com/locustio/lo…  截止文章写作时,一共15951Star。  Locust生态良好,它已在多家外企(包括世界500强)投入使用:  如此看来,Locust是非常值得学习和掌握的一款工具。  Python的魔力在于化繁为简,基于Python的Locust也能给仍然困惑于性能测试的我们带来启发。  Locust特点  · 以纯Python方式编写用户脚本,提供极大自...
            0 0 1067
            分享
          •   测试用例的设计方法  等价类  因材施教的例子:  原则上讲,老师都应该根据每个学生的学习情况制定相应符合的学习方案,但是实际上学生太多,老师管不过来,只能讲学生分为三六九等,优等生强调知识面的扩展和综合能力的提升,中等生强调夯实基础,查缺补漏,差等生强调优先掌握重点,暂时逃过难点.......  思路:输入的集合是无穷的,不能全部都覆盖到。  等价类:依据需求将输入划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的整个等价类测试通过,这样就可以通过较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。  弊端:等价类只考虑输入域的分类,没有考...
            14 15 4713
            分享
          • 浏览器兼容性测试这是兼容性测试的子类型(如下所述),由测试团队执行。浏览器兼容性测试 针对 Web 应用程序执行,并确保软件可以在不同浏览器和操作系统的组合下运行。这种类型的测试还验证 Web 应用程序是否在所有浏览器的所有版本上运行。向后兼容性测试这是一种测试,用于验证新开发的软件或更新的软件是否适用于旧版本的环境。向后兼容性测试检查新版本的软件是否与旧版本软件创建的文件格式正常工作。它还适用于由该软件的旧版本创建的数据表、数据文件和数据结构。如果更新了任何软件,那么它应该可以在该软件的先前版本之上运行良好。黑盒测试此类测试不考虑内部系统设计。测试基于需求和功能。可以在此处找到有关...
            0 0 1602
            分享
          • DevOps 方法继续加强其在软件开发中的地位。所谓的连续工具是该领域最常用的工具之一。持续集成和持续交付等实践能够在进行任何更改后立即将代码交付到生产环境中。当使用更小改动的代码块时,将会让新功能发布和修复BUG并行成为可能。软件开发的 CI/CD 方法为产品迭代带来了更高的可靠性和更快的更新速度。CI 是 CI/CD 技术的第一阶段。在项目中实施持续集成有很多好处。它是软件更新的一个基本过程,其主要功能是将来自不同开发人员的代码更改集成到一个仓库中。今天我们将重点介绍 CI/CD 的第二阶段,持续交付。它有助于确保代码已准备好交付。它的主要特点是代码构建、测试和交付等过程的自动化,有助于及...
            1 0 914
            分享
      • 51testing软件测试圈微信