自己给公司同事写的一点入门小知识,希望对新同行有些帮助。
上次性能测试培训后,不少同事反馈性能测试的一些基本概念还是难以理解,所以我在这里把那些看起来比较虚无缥缈的概念实例化生活化一下,一来仅供大家参考,二来当做自己的一个简单总结。
● 什么是性能测试?
性能测试可以用资本家模型来描述。资本家自然是希望工人们多干活少拿工资,同样性能测试也是要求系统多干活少损耗。又要马儿跑得快又想马儿少吃草。
不少前辈总结过,性能测试是在时间和空间上寻找佳结合点。马儿跑得快是指时间,不吃草是指空间。性能测试则是寻找时间和空间之间的一个平衡点。
上述为朴素和广义的性能测试。
● 性能测试的观点
性能测试有如下几个观点可以进行关注:
用户的观点:用户的观点很简单,系统快而稳定!所以如果从用户观点进行性能测试的话,那么性能测试的终效果表现为提高用户体验。大部分门户网站的性能测试是从用户的观点来编写测试用例和脚本的。
系统的观点:系统观点也不难。在已有得性能硬件软件条件下,进行系统测试从而获取系统的短板,短板可能是硬件瓶颈,也可能是软件的缺陷。系统观点的终测试效果表现为优化系统软硬件,消除系统的显式瓶颈。
开发的观点:开发的观点与系统观点差不多,但是开发观点对软件关注得更为投入。以开发观点进行性能测试,则性能测试的介入时间会比以上两种观点都要来得早。比如系统数据库设计完毕之后,可以立即利用性能测试来测试数据库设计上的瓶颈,而不像上述两种测试观点一样,必须系统功能测试稳定之后方可进行。
综上所述,从用户的观点去进行性能测试是满足用户需求的好手段;而从系统角度去进行性能测试则可以确定系统的性能指标。而从开发的观点去进行性能测试则对开发过程很有帮助,也会降低后续出现性能瓶颈的风险。
● 性能测试的几种常见方法
负载测试:负载测试是用户观点的测试行为。简单说来是负载测试是让系统在一定得负载压力下进行正常的工作,观察系统的表现能否满足用户的需求。
用户的需求从何而来?需求分析——特指性能测试的需求分析。由此看来需求分析是相当重要的。
负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现。
负载测试的预期结果是用户的性能需求得到满足。此指标一般体现为响应时间、交易容量、并发容量、资源使用率等。
负载测试也是常用的性能测试方法,因此也有不少人将负载测试混淆为性能测试。
压力测试:压力测试的关键字是“极端”。通过对系统的极端加压,从而观察系统的所表现出来性能问题。再对此性能问题进行分析,从而达到系统优化的目的。所以压力测试是一定要让系统出问题,如果系统没有出问题,那么压力测试的手段和方法肯定存在问题。
并发测试:验证系统的并发能力。通过一定的并发量观察系统在该并发量的情况下所表现出来的行为特征,确定系统是否满足设计的并发需要。并发测试是系统观点的测试行为。
基准测试:顾名思义,基准测试要有一个基准点,也是说供比较基点。当软件系统中增加一个新的模块的时候,需要做基准测试,以判断新模块对整个软件系统的性能影响。按照基准测试的方法,需要打开/关闭新模块至少各做一次测试。关闭模块之前的系统各个性能指标记下来作为基准(Benchmark),然后与打开模块状态下的系统性能指标作比较,以判断模块对系统性能的影响。
稳定性测试:很简单,长时间进行负载测试,从而观察系统的稳定性。
可恢复性测试:测试系统能否快速地从错误状态中恢复到正常状态。比如,在一个配有负载均衡的系统中,主机承受了压力无法正常工作后,备份机是否能够快速地接管负载。可恢复测试通常结合压力测试一起来做。
好吧,如果以上概念仍然过于“神乎其技”让人如同满文**过生日一般如坠云里雾里,下面我将会以打比方的方式让大家更好的理解上述内容。
《西游记》中有一场景叫做:“猪八戒背媳妇”,下面我们以这个来打比方向大家描述几种性能测试方法的异同点。
我们将猪八戒同志作为性能测试的被测试对象。
负载测试:猪同志身上背着的高小姐可以被视为加在“猪八戒人猪混合系统”上的负载。当然了,猪八戒身强体壮,背个高小姐应该是问题不大的。负载测试是让猪八戒背着高小姐走路(这里的走路是一定得系统行为,通常这种系统行为通过脚本来进行模拟),我们观察猪八戒的生理和心理指标是否存在异常从而断定“猪八戒人猪混合系统”的瓶颈所在。如果猪八戒背着背着腰酸背疼腿抽筋,那么猪无能同志可能是缺钙了,需要补钙;如果他背着背着头晕眼花四肢麻木,那么猪同志应该是脂肪肝、酒精肝三高患者的杰出代表,这证明猪八戒需要减肥了。如果猪八戒背着小媳妇身轻如燕、健步如飞,那么我们可以判断猪八戒同志是个好同志,“猪八戒人猪混合系统”是个好系统。当然,这只是在没有测试标准的衡量基础上得到的结论,为了更进一步的测试“猪八戒人猪混合系统”,我们需要给这个系统一些指标,这个指标举例如下:背着体重为45公斤的高小姐走上一段山路十八弯总长为10公里的羊肠小道,在此过程中猪八戒同志的平均时速不能低于8km/h,其心跳不能快于60次/秒。好吧,再进行一次测试,我们发现在测试过程中猪八戒同志依然健步如飞,身轻如燕,但是其心跳却高于60次/秒。于是在猪八戒同志心跳高于60次/秒的那一刻,我们可以停止测试,帮猪八戒同志找出瓶颈,待此瓶颈问题被解决后,我们再对其进行测试。当然,如果猪八戒一背上高小姐显得异常吃力,举步维艰,那么我们可以认为高小姐应该减肥了(负载过大),我们应该让高小姐节食一段时间,体重达到正常标准后再进行测试。以上是负载测试的一个通俗例子。
压力测试:还是猪八戒同志背媳妇。我们发现他一次背一个媳妇异常轻松,于是乎我们必须加大负载,让猪八戒在极端的情况下进行背媳妇活动。我们可以让猪八戒同志一次背10个媳妇,当然这并不符合一夫一妻制,因此我们选择让猪八戒同志来背孙悟空同学。孙同学是石头里蹦出来的,所以密度大,质量大,符合极端负载的标准。
测试开始了,猪同志背上孙同学立即大汗淋漓、哭爹喊娘。好了,极端负载的条件达到。我们可以观察猪八戒的表现以确定猪八戒同志全身薄弱的部位了。如果我们发现猪八戒同志腹部力量不足从而导致背孙同学极度吃力,那么我们可以让猪八戒去练腹肌,让他的腹部力量得到增强。这样我们也找到了系统的瓶颈,对系统进行了优化。
如果猪八戒背上孙悟空依然轻轻松松,神情自若,那么我们可以猜测猪八戒背的孙同学不是孙悟空而是孙尚香。于是我们可以选择更大的负载进行测试。
压力测试一定要测出来问题,否则我们有理由认为压力负载过小,不符合测试要求。
并发测试:主要是测试猪八戒一次能背几个媳妇。如果“猪八戒人猪混合系统”的设计目标是“一次至少背上三到四个高小姐”的话,我们有尺度来衡量猪八戒的表现是否达标。
基准测试:如果猪八戒同志在被高小姐的时候没有服用任何的违禁药品,那么我们可以将此次的测试结果作为一个基点,然后让猪八戒同志喝点红牛或者是学习满文**同学嗑点小药,然后进行同样的负载测试,查看****或者是喝红牛对猪八戒背高小姐这个行为是否产生了利弊影响。这里的****可以值得是软件更换了一种新算法,也可以理解系统更换了新的中间件。当然我们也可以不让猪八戒同志背高小姐,而换成是让孙悟空同学背高小姐,观察这两次测试的测试结果,从而确定究竟那一种系统更能胜任“背高小姐”这个重任。
稳定性测试:让猪八戒背高小姐背上七七四十九天,观察猪同学的表现。若“猪八戒人猪混合系统”的设计要求为至少能连续背高小姐走上49天,而实际猪八戒只走了36天的话,我们可以认为“猪八戒人猪混合系统”不达标,需要优化。
可恢复性测试:先让猪八戒背孙悟空同志走上半天,此时猪八戒已经累得接近崩溃,然后再让猪八戒背上高小姐,查看猪八戒是否能从疲劳中恢复,从而担当起背高小姐的重任。
性能测试的概念还有很多,不过时间有限,仅举几个例子让大家了解一下性能测试的基础概念。如果您对以上内容有任何疑议,欢迎斧正指导。
本文首发于7dtest论坛:http://www.7dtest.com/site/thread-2177-1-1.html