来源互联网
。
讲到测试,人们脑海中首先浮现的是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。
讲到测试,人们脑海中首先浮现
的是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有许多其它的非功能因素在起着决定性作用。比如软件响
应速度,影响软件响应速度的因素很多,有些是因为算法不够高效,有些可能受用户并发数的影响。
在我所负责的测试项目中,程序功能能够
满足客户需求,但当把程序交付客户使用时,由于客户网络应用环境复杂,而我们在压力测试时没有周密考虑各种可能发生的情况,软件程序在巨大负载下频繁崩
溃,使测试团队饱受客户和老板的抱怨。由此,我认识到随着网络环境的复杂性和多样性,压力测试是软件质量保证的重要元素之一,绝对不能马虎了事。
什么是压力测试?
在软件功能测试中,白盒和黑盒技术用于对正常程序功能和性能进行详尽的检查和测试。而压力测试(StreeTesting)则是用来对付非正常的情况。
(1)什么是压力测试
压力测试是指模拟巨大的工作负荷来测试应用程序在峰值情况下如何执行操作。例如模拟实际软硬件环境,在超出用户常规负荷下,长时间运行测试工具来测试被测系统的可靠性,和测试被测系统的响应时间,目的是在极限负载下识别程序的弱点。
在众多类型的软件测试中,压力测试主要是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户访问时软件的抗压能力。因此,压力测试是在一种
需要反常数量、频率或资源下运行系统。由于我们之前对“反常”这个关键词没有理解好,只进行了常规的测试,在这一点上客户的批评让我们感到非常汗颜,说我
们是“头发长,见识短”。
(2)压力测试和负载测试的区别
在这次项目测试前,我一直对压力测试和负载测试存在着一定
程度的混淆。经过这次系统崩溃后,我对压力测试和负载测试的区别有了新的认识。压力测试是在超常规负荷条件下,长时间连续运行系统,检验应用程序的各种性
能表现和反应。负载测试是指测试应用程序在常规负荷下,确认响应时间和其它的性能和表现。
实际上,压力测试也是从比较小的负载开始,逐
渐增加模拟用户的数量,直到应用程序响应时间超时。压力测试的特点是长时间连续运行,增加超负荷(并发,循环操作,多用户)来测试什么时候系统会产生异
常,以及异常处理能力,找出瓶颈所在。现在的我终于明白到其实压力测试实际上就是超常规的负载测试。
(3)压力测试的核心原则
一个有效的压力测试需要遵循一些核心的基本原则,这些原则可以让我们在测试过程中时刻提醒我们压力测试是否还有更多的极端可能。
①重复:最明显且最容易理解的压力原则就是测试的重复。换句话说,重复测试就是一遍又一遍地执行某个操作或功能。功能测试是验证一个操作能否正常执行,而压力测试则是确定一个操作能否在长时间内每次执行时都正常。
②并发:并发是同时执行多个操作的行为。换句话说,就是在同一时间执行多个测试用例。功能测试或单元测试几乎不会与任何并发设计结合。因此,压力系统必须超越功能测试,要同时遍历多条代码路径。
③量级:压力测试另一个重要原则就是要给每个操作增加超常规的负载量。就是说压力测试可以重复执行一个操作,但是在操作自身过程中也要尽量给程序增加负
担,增加操作的量级。一般来说,单独的高强度操作重复自身可能发现不了代码错误,但与其他压力测试方法(如并发和量级)结合在一起时,将可以增加发现错误
的机会。
④随机:意思是任何压力测试都应该多多少少具有一些随机性。例如随机组合前面三种压力测试原则,然后变化出无数种测试形式,就
能够在每次测试运行时应用许多不同的代码路径来进行压力测试。当一个压力测试结合的原则越多,测试执行的时间越长,就可以遍历越多的代码路径,发现的错误
也会越多。
压力测试对系统的重要作用
我们对应用程序进行压力测试时经常会出现这种情况,就是测试到了最后却发现不明白测试结果有什么意义?实际上,当我们都不明白压力测试的意义时,我们就不能设计出各种极限测试用例。
压力测试不同于功能测试,软件的正确性并不是它的测试重点,它所看重的是软件的执行效率,尤其是短时间内访问用户数爆炸性增长时软件的响应速度。因此,明白压力测试的作用,对我们高效完成压力测试有至关重要的指导意义。
(1)测试应用程序的可靠性
在系统崩溃后总结之前失败的压力测试时,我忽视的第一个要点就是没有测试出应用程序在压力下的可靠性。压力测试除了对每个单独的组件进行压力测试外,更
应该对带有其所有组件和支持服务的整个应用程序进行集中压力测试,以检查在巨大的工作负荷时,应用程序在峰值情况下是否可靠的执行操作。例如,当实际情况
是平均每秒出现1个或2个中断的情形下,应当对每秒出现10个中断的情形来进行特殊的测试;又或者把输入数据的量提高一个数量级来测试输入功能是否可靠的
响应。从本质上来说,压力测试是想要看在最大极限时程序是否可靠的运行。
(2)测试应用程序的并发性能
进行压力测试需要对实际的并发访问量有一个正确的预期估算,否则在负载远远大于事前预测的压力下系统将脆弱得不堪一击。导致系统崩溃的因素有很多,处理能力、存储速度、响应时间、网络带宽等无论哪部分出现短板拥堵、后果都可能导致全盘崩溃。
现在我明白,哪怕硬件条件达到了,如果软件的并行处理能力不足将会导致等候队列过长,响应时间变慢,系统崩溃也只是时间问题。简单说就是:压力测试是考察当前软硬件环境下系统所能承受的最大并发负荷,并帮助找出软件程序的瓶颈所在。
(3)测试应用程序的最大负载能力
压力测试的目的之一是找出应用程序能够支持的最大客户端数。通过多次的运行和对测试结果中正在运行用户数与错误用户的对比,然后根据可接受错误率就可得
到该功能的最大负载访问的用户数。最大负载压力测试用来评估在超越最大负载的情况下系统将如何运行,这时的目标是要发现在高负载的条件下应用程序的缺陷
(Bug),例如内存泄漏等。因此,最大负载能力不但是应用程序一个重要的技术指标,也是客户评估和验收软件的一个关键指标。
如何进行高效的压力测试?
软件测试有两句通俗的话:开发是尽可能地让程序通过;而测试则是尽可能地让程序通不过。对于压力测试而言,测试效果好不好,测试计划的好坏是关键。所以,针对不同的情况,分析后有针对的进行测试,比起拿枪乱打、无的放矢显然要高效得多。
进行一次切实可行的压力测试并不像乍看之下那么简单,遇到的问题也可能非常微妙。例如,我的测试团队就经常遇到诸如“客户端每小时将要处理100个客户
订单请求”等此类的需求,于是测试团队就试图把该需求转化为某种测试需求,执行这种测试需求的常见方法就是以死循环的形式对服务器进行反复请求,然后静观
其效。然而,通常事情进行得并不顺利,原因在于这只是把需求表面化了,没有分析出测试需求的本质。高效的压力测试应遵循以下这几个步骤:
(1)确定测试目标
在确定压力测试目标中,我们要定义测试的对象,并对每一个测试对象给出清晰说明,也要定义测试结束的目标。为控制测试的有效性以及完成程度,必须定义准
则和策略。准则必须是客观的,可量化的,而不能是经验或感觉。例如压力测试目标可能是测定终端用户处理事务的响应时间,它可能随用户的增加而增加,但要定
义一个可接受时间。在确定压力测试目标过程中,最好能邀请客户、设计人员等一同对测试目标进行评审。
(2)制定压力测试计划
测试计划内容包括:定义测试资源、制定测试进度表、选择测试工具等。制定测试计划的目的是使压力测试有章可循并得到人力、物力等各方面的保证;在制定测
试进度表时应考虑和开发进度相互协调;对于测试工具的选择应以满足测试目标为前提。所以,这并不是说测试工具提供的功能越多就越好,在实际的选择过程中适
用才是根本。
(3)编写测试案例和设置测试数据
测试人员一般是根据测试案例进行实际的测试工作,因此测试案例的编写
应做到客观全面、重点突出,也就是要求编写的测试案例应该尽可能模拟真实的负荷,不遗漏重要的测试内容。为了让所有的测试顺利执行,可采取数据驱动方式进
行,同时应该对测试数据进行参数化。另外,一般不提倡在开发环境中进行压力测试,最好是另外构建测试环境。
(4)结果分析及测试报告
压力测试运行结束后,应把所有的数据汇总并记录到文件中,以方便对测试结果进行分析和得出结论。若测试失败,应先分析失败原因,如果是软件系统造成的,
应返回给设计人员修改。如果测试结果不满足预期需求,应先对软件程序进行优化调理,然后再次运行测试,直到可以满足预期需求或调整已无法改善结果。
最后需要注意的是测试报告。报告应包括测试提要、测试环境和测试结果。提要应简单说明测试方法、策略、范围、内容;测试环境应包括资源开销、环境配置等;测试结果必须包括测试是否通过或拒绝,并要对测试结论进行说明,并对软件程序的性能做出评价。
分享到:
相关推荐
完善软件压力测试避免系统崩溃恶果 软件测试 讲到测试,人们脑海中首先浮现的是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有许多其它的非功能因素在起着决定性...
盲目崇拜酿恶果作文.doc
热议中国式教育恶果.doc
5. **病句辨析**:语文测试中会考察对句子语病的识别,如选项A中“……的原因,是……的恶果”结构重复,选项B中“技术问题成熟”搭配不当。 6. **词语搭配**:正确选用词语是语文能力的一部分,如“出炉”常用于...
标题和描述中提到的知识点...总的来说,这个案例展示了税务机关如何通过专业方法识别和打击税收违法行为,同时也提醒企业要规范经营,避免涉及关联交易的疑点和虚开发票的风险,遵守税法,以保障企业的长期健康发展。
庄子担忧,圣人在试图推行善的过程中可能变为大盗,因为强制推行的善可能在实际操作中产生恶果,同时也可能激发反对力量。 墨家则强调个体间的联合和团结,通过推动彼此相爱、互利来实现社会的善。他们认为“非攻”...
如一些用户刻意浏览一些钓鱼网站、非法网页,在此过程中,难免受到来自网络病毒地侵袭,假使系统本身的杀毒软件抗攻击能力不足,势必导致信息被盗、系统瘫痪等等不良恶果。只有主动防范、积极应对,才能从根本上提高...
碎片化是众所周知的恶果,一些应用为了兼容更多旧款设备,只得继续使用低level的API,如微信,现在还使用的是API level 9,就是为了能在Android 2.3系统上使用,而Android 5.1支持的API level已达到22了,效率上显然...
通过对国王的故事,讲解了不运动的恶果和运动的重要性。 知识点1:运动的重要性 国王不喜欢运动,导致身体恢复不良,身体健康状况不佳。这说明了运动对身体健康的重要性。运动可以提高身体的免疫力,增强体质,提高...
12. 免费模式:免费模式是电子游戏中唯一能挣钱的模式,但需要小心避免免费模式的恶果。 13. 付费游戏:付费游戏需要小心盗版和盗版的影响。 14. alpha测试:需要在游戏开发过程中进行alpha测试,收集玩家的反馈和...
小动物们的行为警示我们,如果不尊重自然、过度消耗自然资源,生态环境将恶化,生物多样性会丧失,甚至可能导致整个生态系统的崩溃。小动物们最终采取的行动——种树,强调了恢复和保护环境的重要性,同时也教育我们...
java web投票系统源码 ...严禁一切的恶意传播及非法利用,由此所产生的一切恶果也均由读者自行承担 说明 以下仅针对日常 "红队" 场景, 进行了一次相对全面完整的实战攻击利用技术提炼汇总 针对不同的渗透
课件内容通过讲述沙尘暴等自然灾害,强调了人类对大自然的过度开发和破坏导致的恶果。沙尘暴是由于干旱地区土壤干燥,大风将沙尘卷入空中形成的严重风沙天气,对人类生活和环境造成严重影响。课件还提到了“食物链”...
- 其中涵盖了多个方面,如如何避免软件腐化、避免知识重复、编写灵活且可适应性强的代码、防止偶然编程、使用契约、断言和异常来强化代码、准确捕捉需求、进行彻底有效的测试、让用户满意、构建实用程序员团队,以及...
2. 合理规划城市功能区和工业区:避免将工业区设在居民区上风向,减少对居民区的影响。工业区应远离城市中心,降低污染。 3. 管控居民区污染源:加强居民区垃圾处理和餐饮油烟排放的管理,减轻对大气的污染。 4. ...
第二则故事以少年张荩与寿儿的遭遇为例,展示了贪图小便宜的恶果。张荩因为贪恋风月而失去了原本美好的姻缘,最终退入空门。这个故事告诉我们,贪得无厌往往会让人失去更多,提醒人们要平衡得失,避免因小失大。 第...
这也就是"不合作的恶果",每个人都可能成为自己成功的障碍。 接着,汤姆的故事提供了另一种视角。汤姆慷慨地分享南瓜种子,看似帮助了邻居,实际上也在保护自己的优良品种。通过合作,他避免了劣种花粉的传播,确保...
消防平安意识淡薄酿成的恶果是非常严重的,我们应该关注消防,珍爱生命,不要玩火,学会爱护本人和敬重他人的生命。 2. 火灾的危害:火灾已经成为威逼公共平安,危害人们生命财产的一种多发性灾难。据统计,全世界...
洞庭湖湿地是中国最大的内陆湿地,拥有丰富的生态资源,但同时也面临着严重的环境污染和生态恶果问题。洞庭湖湿地可以分为东洞庭湖、西洞庭湖和南洞庭湖三个湖区,每个湖区都有其独特的环境特征和生态特点。 三、3S...