软件测试主讲:许福联系方式电话:62336516手机:13910910901邮件:xufu@buaa.edu.cn地址:信息学院软件教研室主楼411第四章软件自动化测试主要内容4.1自动化测试基础4.2软件自动化测试生存周期方法学4.3软件测试工具分类4.4选择适当的测试工具4.5常见自动测试工具简介4.1自动化测试基础4.1.1自动化测试的意义4.1.2自动化测试的定义和引入4.1.3自动化测试的原理和方法4.1.4自动化测试工具的作用及优势4.1.5自动化测试的运用4.1.1自动化测试的意义软件测试的工作量很大(据统计,测试会占用到40%的开发时间;一些可靠性要求非常高的软件,测试时间甚至占到开发时间的60%-80%)。而测试中的许多操作是重复性的、非智力性的和非创造性的,并要求做准确细致的工作,计算机就最适合于代替人工去完成这样的任务。软件自动化测试是相对手工测试而存在的,主要是通过所开发的软件测试工具、脚本等来实现,具有良好的可操作性、可重复性和高效率等特点。手工测试的局限性通过手工测试无法做到覆盖所有代码路径。简单的功能性测试用例在每一轮测试中都不能少,而且具有一定的机械性、重复性,工作量较大。许多与时序、死锁、资源冲突、多线程等有关的错误,通过手工测试很难捕捉到。进行系统负载、性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,很难通过于工测试来进行。进行系统可靠性测试时,需要模拟系统运行10年、几十年,以验证系统能否稳定运行,这也是手工测试无法模拟的。如果有大量(几千)的测试用例,需要在短时间内(1天)完成,手工测试几乎不可能做到。自动化测试带来的好处缩短软件测试周期,让产品更快投放市场。测试效率高,充分利用硬件资源。节省人力资源,降低测试成本。增强测试的稳定性和可靠性。提高软件测试的准确度和精确度。使测试工作开展相对比较容易,产生更高质量的产品。手工不能做的事情,自动化测试能做,如负载、性能测试。软件测试实行自动化进程,绝不是因为厌烦了重复的测试工作,而是因为测试工作的需要,更准确地说是回归测试和系统测试的需要。建立正确的自动化测试目标目前,软件自动化测试还不能解决所有的测试问题,因此,需要建立正确的自动化测试目标。测试计划产生:主要靠测试工程师与软件生产质量保证专家的合作,自动化工具只能起到一定的辅助作用。一种测试工具不完全适用于所有测试自动测试不一定减轻工作量测试进度可能不一定缩短测试工具不一定易于使用自动化测试的普遍应用存在局限测试覆盖率不会达到百分之百4.1.2自动化测试的定义自动化测试可以被理解为使用一个商业通用测试自动化工具编写一个软件来测试其它软件,是通过编写软件去测试其它软件。编写驱动被测应用程序的测试脚本以执行键盘、鼠标动作和后台进程并验证应用程序的响应和行为。自动化测试的定义和引入(续)对自动化测试需要有正确认识能提高测试效率、覆盖率和可靠性等。自动化测试是对手工测试的一种补充,不能完全代替手工测试。它们各有特点,其测试对象和测试范围都不一样:在系统功能逻辑测试、验收测试、适用性测试、涉及物理交互性测试时,多采用黑盒测试的手工测试方法单元测试、集成测试、系统负载测试、性能测试、稳定性测试、可靠性测试等比较适合采用自动化测试。不稳定软件的测试、开发周期很短的软件、一次性的软件等不适合自动化测试。自动化测试工具在进行功能测试时,其准确的含义是回归测试工具,这时工具不能发现更多的新问题,但可以保证对已经测试过部分的准确性和客观性。多数情况下,手工测试和自动化测试应该相结合,以最有效的方法来完成测试任务。自动化测试的定义和引入(续)通常,当软件开发过程具有下列情况时,就需要考虑引入自动化测试:非常重要的测试;涉及范围很广的测试;对主要功能的测试;容易自动化的测试;很快有回报的测试;运行最频繁的测试;测试个案的生成,包括测试输入、测试输出、测试操作指令等;测试的执行与控制,包括单机运行和网络多机分布式的运行,在节假日的运行,测试个案调用控制,测试对象、测试范围与测试版本的控制等;测试结果与标准输出进行对比;不吻合预期的测试结果的分析、记录、分类和报告,及总体测试状况的统计及报表的产生。并非任何测试自动化都可以起到预期效果,只有好的自动化测试体系才能扬长避短,达到建立自动化测试体系的初衷,在质量保障方面有所作为。否则测试自动化可能会由于其建立和维护等方面的负担造成延误工期、成本浪费,甚至最终被完全放弃。选择高效的自动化测试体系如何评价一个测试或测试自动化体系是否优越呢?为此,我们应该关注自动化测试体系的以下七个方面的属性。(1)可维护性指是否可以很容易使测试更新跟上软件升级的步伐。软件会变更或升级是注定的事实,防止变更或升级造成自动化测试的维护工作量过大是很重要的,否则整个测试自动化工作将可能被全面否决,甚至束之高阁。(2)高效性效率是与成本紧密联系的,自动化测试的一个重要目标就是更经济地运行测试。应在测试和测试自动化的设计阶段全面审视各方面因素,在科学合理的测试流程基础上利用优秀的自动化策略将自动化测试与手工测试有机结合,才能实现效率最大化。(3)可靠性指测试体制是否能给出精确而且可重现的结果。(4)兼容性指是否允许测试用例为不同的测试目标而以不同的方式组合。(5)可用性指定制或更改测试用例是否容易,测试人员或用户掌握和理解其使用方法是否容易。(6)健壮性指是否可以处理意外情况而不退出或终止,并尽量给出正确有用的信息。(7)可移植性指在不同环境中运行测试的能力。应根据使用自动化测试体系的实际目标,综合考虑这七个方面的具体属性,有针对性地提高自己关注的属性,以实施符合实际需要的自动化测试体系。4.1.3自动化测试的原理和方法软件自动化测试是通过设计特殊程序模拟测试人员对计算机的操作过程、操作行为,或者类似于编译系统那样对计算机程序进行检查。软件测试自动化实现的原理和方法主要有:对代码进行静态和动态分析测试过程的捕获和回放测试脚本技术虚拟用户技术代码分析一种白盒测试的自动化方法。代码分析类似于高级编译系统,一般针对不同的高级语言去构造分析工具,在工具中定义类、对象、函数、变量等定义规则、语法规则。在分析时对代码进行语法扫描,找出不符合编码规范的地方。根据某种质量模型评价代码质量,生成系统的调用关系图等。捕获和回放一种黑盒测试的自动化方法。捕获是将用户每一步操作都记录下来。将用户界面的像素坐标或程序显示对象(窗口、按钮、滚动条等)的位置,以及相对应的操作、状态变化或是属性变化。所有的记录转换为一种脚本语言所描述的过程,以模拟用户的操作。回放是将脚本语言所描述的过程转换为屏幕上的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。捕获和回放续自动化负载测试几乎都是采用“录制-回放”技术。首先,由手工完成一遍需测试的流程,由计算机记录下客户端和服务器端之间的通信信息(这些信息通常是一些协议和数据),形成特定的脚本程序(Script)。统一生成多个虚拟用户,运行该脚本,监控系统性能,并提供分析报告。这样,通过几台机器就可以模拟出成百上千用户,以便于对系统进行负载能力测试。捕获和回放续脚本技术脚本是测试工具执行的一组指令的集合,是计算机程序的一种形式。脚本可以通过录制测试的操作产生,然后再做修改,这样可以减少脚本编程的工作量。也可以直接用脚本语言编写脚本。脚本技术可以分为以下几类:线性脚本——录制手工执行的测试用例得到的脚本。结构化脚本——类似于结构化程序设计,具有各种逻辑结构(顺序、分支、循环),而且具有函数调用功能。共享脚本——是指某个脚本可被多个测试用例使用,即脚本语言允许一个脚本调用另一个脚本。数据驱动脚本——将测试输入存储在独立的数据文件中。关键字驱动脚本——是数据驱动脚本的逻辑扩展。自动化测试工具的特征软件测试自动化通常借助测试工具进行。支持脚本化语言(ScriptingLanguage)对程序界面中对象的识别能力支持函数的可重用支持外部函数库抽象层—将程序界面中的对象实体映射成逻辑对象分布式测试(DistributedTest)的支持支持数据驱动测试(Data-DrivenTest)错误处理调试器(Debugger)源代码管理支持脚本的命令行(CommandLine)方式4.1.4自动化测试工具的优势和局限测试工具可以进行部分的测试设计、实现、执行和比较的工作。部分的测试工具可以实现测试用例的自动生成,但通常的工作方式为人工设计测试用例,使用工具进行用例的执行和比较。采用自动比较技术,还可以自动完成测试用例执行结果的判断,从而避免人工比对存在的疏漏问题。自动化测试工具的作用:(1)确定系统最优的硬件配置。(2)检查系统的可靠性。(3)检查系统硬件和软件的升级情况。(4)评估新产品。自动化测试工具的作用及优势(续)自动化测试工具的优势主要体现在以下几个方面:(1)记录业务流程并生成脚本程序的能力。(2)对各种网络设备(客户机或服务器、其它网络设备)的模仿能力。(3)用有限的资源生成高质量虚拟用户的能力。(4)对于整个软件和硬件系统中各个部分的监控能力。(5)对于测试结果的表现和分析能力。测试自动化限制测试自动化可以带来非常明显的收益,但也有以下限制:不能取代手工测试手工测试比自动测试发现的缺陷更多对测试质量的依赖性极大测试自动化不能提高有效性测试自动化可能会制约软件开发工具本身并无想象力另外,人工测试比测试工具更优越的另一个方面是可以处理意外事件。虽然工具也能处理部分异常事件,但是对真正的突发事件和不能由软件解决的问题就无能为力。4.1.5自动化测试的运用测试用例(TestCase,测试个案)的生成测试的执行与控制测试结果与标准输出的对比不吻合测试结果的分析处理测试状态的统计和报表的生成自动化测试与开发中产品每日构建的配合采用自动化比较技术4.2软件自动化测试生存周期方法学自动化测试生存周期方法学1.自动化测试决定2.测试工具获取3.自动化测试引入过程4.测试计划、设计与开发5.测试执行与管理6.测试评审与评估自动化测试生存周期方法学结构自动化测试生存周期方法的应用自动化测试生存周期方法学1.自动化测试决定2.测试工具获取3.自动化测试引入过程4.测试计划、设计与开发5.测试执行与管理6.测试评审与评估A.系统生存周期过程评估与改进F.生成维护阶段C.小型工具先导/原型D.系统设计与开发阶段B.业务分析与需求阶段E.组装与测试阶段4.3自动化测试工具的分类根据测试方法不同,自动化测试工具可以分为:白盒测试工具黑盒测试工具自动化测试工具的分类(续)按照主要用途和应用领域分类:捕获错误用途:用于捕获软件错误或程序调试。代码覆盖率分析器和代码测量器内存泄漏监测工具可使用性测试工具测试数据生成器测试管理工具网络测试工具GUI测试工具负载和性能测试工具专用工具4.4选择自动化测试工具测试人员在选择和使用自动化测试工具时,可以从以下角度来考虑:关注组织的需要自主开发购买按照用途选择匹配的测试工具在适当的生命周期选择测试工具按照测试人员的实际技能选择匹配的测试工具选择一个可提供的测试工具4.5几种常用软件测试工具QACenterQACenter自动化测试系列工具是Compuware公司的产品,它能够帮助测试人员创建快速、可重用的测试过程。这些测试工具可以帮助管理测试过程,快速分析和调试程序,包括针对回归、强度、单元、并发、集成、移植、容量、负载测试、自动执行测试和产生测试结果文档。WinRunnerWinRunner是MercuryInteractive公司提供的一个企业级的功能检测工具。WinRunner使功能测试得以自动化,从而保证了应用程序按照预定方式运行。它以测