性能测试基础(一)性能测试分类

虫师 创建于 10 个月 之前

最后更新时间 2019-01-15


关于性能测试有几个名词:性能测试、负载测试、压力测试、并发测试,很多人都是混合使用,或者有时压力测试,有时叫并发测试。这些名词除了非测试人员分不清楚,甚至许多专业测试人员也对这些名词也很模糊。关于这个分类我翻阅了一些资料,解释都比较模糊,并没有给出本质上的区别。只是从不同角度和关注点来解释。我们先来看看这些解释。


性能测试(狭义)


性能测试方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。通俗地说,这种方法就是要在特定的运行条件下验证系统的处理能力。

特点:

  • 这种测试方法的主要目的是验证系统是否有系统宣称具有的能力。

  • 这种测试方法要事先了解被测试系统经典场景,并具有确定的性能目标。

  • 这种测试方法要求在已经确定的环境下运行。

也就是说,这种方法是对系统性能已经有了解的前提,并对需求有明确的目标,并在已经确定的环境下进行的。


负载测试


通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。

特点:

  • 这种测试方法的主要目的是找到系统处理能力的极限。

  • 这种测试方法需要在给定的测试环境下进行,通常也需要考虑被测试系统的业务压力量和典型场景、使得测试结果具有业务上的意义。

  • 这种测试方法一般用来了解系统的性能容量,或是配合性能调优来使用。

也就是说,这种方法是对一个系统持续不段的加压,看你在什么时候已经超出“预期要求”或系统崩溃。


压力测试(强度测试)


压力测试方法测试系统在一定饱和状态下,例如CPU、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。

特点:

  • 这种测试方法的主要目的是检查系统处于压力性能下时,应用的表现。

  • 这种测试方法一般通过模拟负载等方法,使得系统的资源使用达到较高的水平。

  • 这种测试方法一般用于测试系统的稳定性。

也就是说,这种测试是让系统处在很大强度的压力之下,看系统是否稳定,哪里会出问题。


 

并发测试


并发测试通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。

特点:

  • 这种测试方法的主要目的是发现系统中可能隐藏并发访问时的问题。

  • 这种测试方法主要关注系统可能存在的并发问题,例如系统中的内存泄漏、线程锁和资源争用方面的问题。

  • 这种测试方法可以在开发的各个阶段使用需要相关的测试工具的配合和支持。

也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。


配置测试


配置测试方法通过对被测系统的软\硬件环境的调整,了解各种不同对系统的性能影响的程度,从而找到系统各项资源的最优分配原则。 特点:

  • 这种性能测试方法的主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作。

  • 这种性能测试方法一般在对系统性能状况有初步了解后进行。

  • 这种性能测试方法一般用于性能调优和规划能力。

也就是说,这种测试关注点是“微调”,通过对软硬件的不段调整,找出这他们的最佳状态,使系统达到一个最强的状态。


可靠性测试


在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。

特点:

  • 这种性能测试方法的主要目的是验证是否支持长期稳定的运行。

  • 这种性能测试方法需要在压力下持续一段时间的运行。

  • 测试过程中需要关注系统的运行状况。

也就是说,这种测试的关注点是“稳定”,不需要给系统太大的压力,只要系统能够长期处于一个稳定的状态。

除了上面的分类,还有失效性测试,就是系统局部发生问题时,其它模块是否可以正常的运行。这个在极少数情况下进行,这里就不介绍了。


性能测试分类之我见


上面的类分完了,似乎得到不少专家的认同。但我们在做性能测试过程中真的能把它们区分的很清楚么?你能严格区分出你这次的测试到底并发测试还是压力测试。

我中学时练过几年体育,对于一个体育运动员来说,那么多的体育项目,其实,考核他的就两方面:爆发力和耐力。其实,我们在进行性能测试时主要关注的也是这两方面。

爆发力: 拿一个举重选手来说,他的重点在重量上,因为你只要能举起三秒就算你成功了。关键是看你能举起一个什么样的重量。

耐力: 拿一个马拉松运动员来说,你百米速度跑得再快没用。关键是这40公里路程中,最先跑到终点的人才是赢家。

整体协调性: 作为一个教练,在训练运动员时,除了看这个运动员的实际成绩之外,分析运动员的整体协调性,并发现运动员的短板是最关键的。比如一个运行员身体各位部位练得非常强壮,但右臂先天性萎缩。虽然他的最终的跑步成绩不错。但他在跑的过程中,身体有各个部位明显都在分担右臂的不足。右臂影响了整个体能的发挥。

回到性能测试上上,爆发力就是系统能承受的最大压力,没准系统承受的压力很大,但过半个小时之间就挂掉了。耐力就是这个系统长时间处于压力下的稳定性,这系统超级稳定,跑个几十年都不用重启服务器。那么整体协调性就是看系统有没系统瓶颈(短板),并对其进行系统调优。

我要留言

  • 压力测试和负载测试定义,您这边两个地方说的不一样啊 本文中 压力测试定义是:CPU、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。 负载测试定义是:对一个系统持续不段的加压,看你在什么时候已经超出“预期要求”或系统崩溃

    这个和您课堂中讲的完全相反,请问到底哪个是对的?

    以下是引用另一篇您的文章

    负载测试(Load Test) 主要指的是模拟系统在正常负载压力场景下,考察系统的性能指标。这里说的正常负载,主要是指用户对系统能承受的最大业务负载量的期望值,即预计系统最大应该支持多大用户的并发量。通过负载测试,目的是验证系统是否能满足预期的业务压力场景。我们可以把这种测试方法称为容量测试(volume testing)

    另外稳定性测试(endurance testing)也是负载测试的一种。稳定性测试的加压策略跟负载测试也很接近,都是对系统模拟出系统能承受的最大业务负载量,差异在于,稳定性测试更关注系统在长时间运行情况下系统性能指标的变化情况,例如,系统在运行一段时间后,是否会出现事务处理失败、响应时间增长、业务吞吐量降低、CPU/内存资源增长等问题。

    例子

    测试某email服务的性能。已知该应用的用户峰值是1000,这些用户可以进行阅读发送邮件等操作,每个操作都是事务类型的。假设我们对应用的目标是可以撑住每个用户每小时进行10次事务操作,那么我们需要模拟多少并发呢?

    1000 * 10 = 10,000transactions/hour

    关键字: 预期容量 稳定性测试

    压力测试(Stress Test) 压力测试是为了发现在多大并发压力下系统的性能会变得不可接受,或者出现性能拐点(崩溃)的情况。在加压策略上,压力测试会对被测系统逐步加压,在加压的过程中考察系统性能指标的走势情况,最终找出系统在出现性能拐点时的并发用户数,也就是系统支持的最大并发用户数。

    例子

    Writer1.1.0是个文字处理模块,该模块设计的最大处理字符个数是65535。现在我们要测试该模块在处理超过最大处理能力时的表现——起码不能挂——,这时我们可以随机的拷贝一些字符串,逐渐加大字符串的长度,直到超过65535个。如果该模块此时还没有crash,那就证明该模块工作正常,达到了设计预期。

    关键字: 压垮 逐步加压

    总结 性能测试手段的重点在于加压的方式和策略。

    Curry 创建于 2019-05-23 17:21:46

  • 赞同

    HuangS 创建于 2019-03-21 14:50:12