软件测试基础教程杜文洁景秀丽主编中国水利水电出版社第七章软件自动化测试第七章软件自动化测试7.1软件自动化测试概述7.2自动化测试的策略与运用7.3常用自动化测试工具简介习题本章概要软件自动化测试自动化测试的方法常用的自动化测试工具。第七章软件自动化测试7.1.1自动化测试定义及发展简史7.1.2软件测试自动化的必然性7.1.3软件测试自动化的引入时机7.1.4国内软件自动化测试实施现状分析7.1.5软件测试自动化的引入条件第七章软件自动化测试7.1软件自动化测试概述7.1软件自动化测试概述计算机科学发展至今,最根本的意义是解决人类手工劳动的复杂性,成为替代人类某些重复性行为模式的最佳工具。而在计算机软件工程领域软件测试的工作量很大,一般测试会占用到40%的开发时间;一些可靠性要求非常高的软件测试工作量巨大,测试时间甚至占到60%开发时间。而且测试中的许多操作是重复性的,非智力性的和非创造性的,并要求做准确细致的工作,计算机就最适合于代替人工去完成这样的任务。因而进行自动化测试能够提高软件测试工作效率,提高开发软件的质量,降低开发成本和缩短开发周期。软件自动化测试是相对手工测试而存在的,主要是通过所开发的软件测试工具,脚本等来实现,具有良好的可操作性,可重复性和高效率等特点。已经成为国内软件工程领域一个重要领域;不言而喻,软件测试从业者都意识到软件测试这项工作走向成熟化、标准化的一个必经之路就是要实施自动化测试。第七章软件自动化测试7.1.1自动化测试定义及发展简史软件自动化测试就是使用自动化测试工具或手段,按照测试工程师的预定计划进行自动的测试,来验证各种软件测试的需求,它包括测试活动的管理与实施。目的是减轻手工测试的工作量,提高软件的质量。软件的自动化测试在过去一段时间中有长足的进步。每一代技术都解决了很多重要问题。第一代的自动化测试大概在90年代初期,透过硬件的方式录制键盘的输入并播放,但缺少检查点(checkpoint)的功能,由工具录制并记录操作的过程和数据形成脚本,通过回放来重复人工操作的过程。在这种模式下数据和脚本混在一起,几乎一个测试用例对应一个脚本,维护成本很高。而且即使界面的简单变化也需要重新录制,脚本可重复使用的效率低,而且测试脚本很难维护。第七章软件自动化测试7.1.1自动化测试定义及发展简史第二代的自动化测试则大约在90年代中后期开始的,这时已经由硬件转变成透过软件录制/播放(capture/playback)的方式产生测试脚本(script),并且也增加了检查点的功能,从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高,但受界面变化的影响仍然很大。比较大的问题是测试脚本也是一种程序语言,所以测试人员也需要懂程序语言,换句话说就是要会写程序。而且当软件有变动时,测试脚本也需要同步更新,这对测试人员来说是一大挑战,测试人员常常就是整个测试脚本再重新录制一遍。第三代关键字驱动(keyworddriven)的自动化测试,开始于2001年。主要是把测试脚本给抽象化(abstraction),让那些即使不懂测试脚本,不会写程序的非技术人员,也可以使用自动化测试工具建立自动化测试个案。关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑。主要关键字包括三类:被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value)。关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。第七章软件自动化测试7.1.1自动化测试定义及发展简史第四代称为专注于业务需求的自动化测试(MercuryBusinessProcessTesting)。弥补第三代自动化测试工具的不足,从测试脚本的设计、自动化、维护及文件存档都做一个全面且根本的进化,测试用例的设计被从测试工具中分离了出来,并且需要一个具有工具技能和开发技能的测试团队,使专业的测试自动化将技能的使用最优化的结合起来。第七章软件自动化测试7.1.2软件测试自动化的必然性1.手工测试有它的局限性通过手工测试无法做到覆盖所有代码路径,简单的功能性测试用例在每一轮测试中都不能少,而且具有一定的机械性,重复性,工作量往往较大。许多与时序,死锁,资源冲突,多线程等有关的错误,通过手工测试很难捕捉到。进行系统负载,性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,很难通过手工测试来进行。进行系统可靠性测试时,需要模拟系统运行10年,几十年,以验证系统能否稳定运行,这也是手工测试无法模拟的。软件测试繁多、沉闷、耗时,对于产品型软件或需求不断更新的系统,每一版产品发布或系统更新的周期就只有短短的几个月,这就意味着开发周期也只有短短的数月,而在测试期间是每天或每几天要发布一个版本供测试人员测试,一个系统的功能点少则上百多则上千上万,使用手工测试是非常耗时和繁琐的,这样频繁的重复劳动必然会导致测试人员产生厌倦心理、工作效率低下。第七章软件自动化测试7.1.2软件测试自动化的必然性2.自动测试的优势(1)适合做新版本执行回归测试对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。(2)具有一致性和可重复性由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性,而这一点手工测试是很难做到的。由于自动化测试的一致性,很容易发现被测软件的任何改变。(3)更好的利用资源理想的自动化测试能够按计划完全自动的运行,测试人员可以设置自动化测试程序在周末和晚上执行测试,白天上班的时候测试人员就可以收集测试所发现的缺陷,并交给开发人员修改,同时测试人员可以在白天开发新增功能的自动化测试脚本,或对已有的脚本不适合的地方进行修改。这样充分的利用了公司的资源,也避免了开发和测试之间的等待。第七章软件自动化测试7.1.2软件测试自动化的必然性(4)解决测试与开发之间的矛盾通常在开发的末期,进入集成测试阶段,由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间。事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。(5)弥补手工测试难实现的不足压力测试、并发测试、大数据量测试、崩溃性测试等,都需要成百上千的用户同时对系统加压才能实现其效果,用人来测试是不可能达到的,也是不现实的。在没有引入自动化测试工具之前,为了测试并发,组织几十号人在测试经理的口令下,同时按下同一个按钮,但如果需要更大的并发量,就很难实现了。第七章软件自动化测试7.1.2软件测试自动化的必然性自动化测试较手工测试具有很多优点,它可以缩短软件开发测试周期,可以让产品更快投放市场;测试效率高,充分利用硬件资源;节省人力资源,降低测试成本;增强测试的稳定性和可靠性;提高软件测试的准确度和精确度,增加软件信任度。自动化软件测试工具使测试工作相对比较容易,但能产生更高质量的测试结果。手工不能做的事情,自动化测试能做,如负载,性能测试。软件测试实行自动化进程,绝不是因为厌烦了重复的测试工作,而是因为测试工作的需要,更准确地说是回归测试和系统测试的需要。在过去的数年中,通过使用自动化的测试工具对软件的质量进行保障的例子已经数不胜数。到现在为止自动化测试工具已经足够完善了,完全可以通过在软件的测试中应用自动化的测试工具来大幅度的提供软件测试的效率和质量。在使用自动化的测试工具的时候应该尽早的开始测试的工作,这样可以使修改错误更加的容易和廉价,并且可以减少更正错误对软件开发周期的影响。通下表我们可以看出自动化测试与传统的手工测试在所有的方面都有很大的不同,尤其是在执行测试和产生测试报告的方面。这个测试案例中包括1750个测试用例和700多个错误。第七章软件自动化测试7.1.2软件测试自动化的必然性第七章软件自动化测试表7-1手工测试与自动化测试的比较测试步骤手工测试自动化测试通过使用工具的改善测试的百分比测试步骤测试计划的开发3240-25%测试计划的开发测试用例的开发26211755%测试用例的开发测试执行4662395%测试执行测试结果分析1175850%测试结果分析错误状态/更正检测1172380%错误状态/更正检测产生报告961683%产生报告时间总和109027775%时间总和7.1.2软件测试自动化的必然性目前软件开发过程中,迭代式的开发过程已经显示了比瀑布式开发的巨大好处,并已逐渐的取代传统的瀑布式开发成为了目前最流行的软件开发过程。在迭代开发中强调在较短的时间间隔中产生多个可执行、可测试的软件版本,这就意味着测试人员也必须为每次个迭代产成的软件系统进行测试。测试工作的周期被缩短了,测试的频率被增加了。在这种情况下,传统的手工测试已经严重的满足不了软件开发的需求。当第一个可测试的版本产生后,测试人员开始对这个版本的系统进行测试,很快第二个版本在第一个版本的技术上产生了,测试人员需要在第二次测试时重复上次的测试工作,还要对新增加的功能进行测试,每经过一个迭代测试的工作量会逐步的累加。随着软件开发过程的进展,测试工作变得越来越繁重,如果使用手工测试的方法,将很难保证测试工作的进度和质量。在这种情况下应用良好的自动测试工具将势在必行。通过使用自动化测试工具测试人员只要根据测试需求完成测试过程中的所需的行为,自动化测试工具将自动生成测试脚本,通过对测试脚本的简单修改便可以用于以后相同功能的测试了,而不必手工的重复已经测试过的功能部分。第七章软件自动化测试7.1.2软件测试自动化的必然性其次,在很多项目中,测试人员的所有任务实际上都是手动处理的,而实际上,有很大一部分重复性强的测试工作,是可以独立开来自动实现的。最后,测试人员通常很难花费大量时间来学习新技能,这是目前国内测试从业者的现状,太多的企业为了节约成本而将刚刚走出校门的毕业生作为测试工程师,他们每日做着繁忙的重复工作,却无法深入学习测试技能。而软件测试自动化将改变这种局面,也是未来测试工程师或即将成为测试工程一项强有力的工作技能。可以说,实施测试自动化是软件行业一个不可逆转的趋势,如果在这个领域走在了前列,无论从企业的核心竞争力还是个人的工作技能来说,都有巨大的优越性,而国内众多的软件厂商也的确在纷至沓来的着手开展着这项工作。第七章软件自动化测试7.1.3软件测试自动化的引入时机自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。清晰、合理的判断哪些测试可以采用自动化是提高测试效率和质量的关键。1.产品型项目产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担,同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。2.增量式开发、持续集成项目由于这种开发模式是频繁的发布新版本进行测试,也就需要频繁的自动化测试,以便把人从中解脱出来测试新的功能。3.能够自动编译、自动发布的系统要能够完全实现自动化测试,必须具有能够自动化编译,自动化发布系统进行测试的功能。当然,不能达到这个要求也可以在手工干预的情况下进行自动化测试。4.回归测试回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。5.多次重复、机械性动作,将烦琐的任务转化为自动化测试自动化测试最适用于多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。第七章软件自动化测试7.1.3软件测试自动化的引入时机6.需要频繁运行测试在一个项目中需要频繁