您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 软件测试第七章软件测试自动化
软件测试技术东北大学软件学院吴辰铌第七章软件测试自动化•主要内容•7.1软件测试自动化基础•7.2何时进行自动化测试•7.3如何进行测试自动化开发•7.4对测试自动化的不正确期望•7.5JUnit的使用•7.6Winrunner的使用7.1软件测试自动化基础•什么是软件测试自动化?•只需购置一种流行的测试执行工具,记录手工测试过程,然后在需要时回放录制的过程。没这么简单7.1软件测试自动化基础•软件测试自动化的定义:•各种测试活动的管理与实施,包括测试脚本的开发与执行,以便使用一种或多种自动化测试工具来验证需求。7.1软件测试自动化基础•为什么要进行自动化测试?•手工测试的局限性•通过手工测试无法做到覆盖所有代码路径。•许多与时序、死锁、资源冲突、多线程等有关的错误通过手工测试很难捕捉到。•在系统负载、性能测试时,需要模拟大量数据、或大量并发用户等各种应用场合时,也很难通过手工测试来进行。•在进行系统可靠性测试时,需要模拟系统运行十年、几十年,以验证系统能否稳定运行,也是手工测试无法模拟的。•如果有大量(几千)的测试用例,需要在短时间内完成,手工测试又怎么办呢?•测试可以发现错误,并不能表明程序的正确性。7.1软件测试自动化基础•为什么要进行自动化测试?•机器代替人•可以更频繁的测试•每一次做同样的测试•做更多的测试•减少了烦闷的、重复性的工作。可用时间来检查结果。•更多的时间用来做手工测试和寻找Bugs。7.1软件测试自动化基础•为什么要进行自动化测试?•自动化可进行一些高难度的测试•性能,压力,配置•一致性•性能测试,回归测试•可重复使用•稳定性•增进测试人员与开发人员之间的合作伙伴关系7.1软件测试自动化基础•什么情况下适合使用自动化测试工具?•需要反复进行的工作。•负载压力测试。•大量的测试人员和开发人员合作完成一个产品。•需要进行测试系统后台或者内部的性能特性,进而进行故障定位和性能调优。7.1软件测试自动化基础•自动化测试的局限性:•定制型项目。•周期很短的项目。•业务规则复杂的对象。•人体感观与易用性测试。•不稳定的软件。•涉及物理交互。7.1软件测试自动化基础•假如一个功能测试用例,手工运行需要10分钟,而为此测试用例开发脚本需要4个小时,即240分钟,那么意味着这个测试脚本要被运行24次收回成本,如果再加上测试脚本的维护工作量(10%),需要重复运行40-50次,才收回成本。如果在产品的一个版本中要进行2-3轮测试(一般是需要的),这个产品需要发布15-20个版本才收回成本。•所以业界常说,产品发布7个版本才收回成本。7.1软件测试自动化基础结构成本收益净收益非自动化000录制和回放8.3112.7数据池的数据驱动结构8.4189.6框架结构9.8155.2侧重于应用和数据池的框架/数据驱动结构11.6197.4测试自动化成本/收益分析7.1软件测试自动化基础•手工测试与自动化测试的特点对比:•在系统功能逻辑测试、验收测试、适用性测试、涉及物理交互性测试时,多采用黑盒测试的手工测试方法;•单元测试、集成测试、系统负载或性能、稳定性、可靠性测试等比较适合采用TA;•对那种不稳定软件的测试、开发周期很短的软件、一次性的软件等不适合测试自动化•工具本身并没有想象力和灵活性,根据经验报道,自动测试只能发现15%的缺陷,而手工测试可以发现85%的缺陷;TA工具在进行功能测试时,其准确的含义是回归测试工具,因为工具不能发现更多的新问题,但可以保证对已经测试过部分进行测试的准确性和客观性7.1软件测试自动化基础•什么测试类型能够自动化:•单元测试•集成测试•系统测试•性能测试•压力测试•安全测试•回归测试•稳定性测试7.1软件测试自动化基础•测试自动化的基本结构机房办公室文件服务器SQLServerWeb服务器控制程序拷贝测试文件拷贝测试结果分派工作分派工作查询结果Build系统编译寻找工作项目更新显示DevBuild,TestBuild7.1软件测试自动化基础•自动化测试的原理和方法•代码分析:类似于高级编译系统,在工具中定义类/对象/函数/变量等定义规则、语法规则等,在分析时对代码进行语法扫描,找出不符合编码规范的地方。代码分析是一种白盒测试的自动化方法。•捕获和回放:捕获和回放则是一种黑盒测试的自动化方法。7.1软件测试自动化基础•自动化测试的原理和方法•脚本技术:•线性脚本,是录制手工执行的测试用例得到的脚本,这种脚本包含所有的击键、移动、输入数据等,所有录制的测试用例都可以得到完整的回放。•结构化脚本,类似于结构化程序设计,具有各种逻辑结构、函数调用功能。结构化脚本易于维护。•共享脚本,是指某个脚本可以被多个测试用例使用。•数据驱动脚本,将测试输入存储在独立的(数据)文件中,而不是存储在脚本中。•关键字驱动脚本,是数据驱动脚本的逻辑扩张7.1软件测试自动化基础•自动化测试的原理和方法•自动比较:•静态比较和动态比较•简单比较和复杂比较•敏感性测试比较和健壮性测试比较•比较过滤器•测试管理7.1软件测试自动化基础•自动化测试工具的分类:•单元测试工具:•Panarama•Junit•C++Testing•负载和性能测试工具:•LoadRunner•WAS•QALoad7.1软件测试自动化基础•自动化测试工具的分类:•功能测试工具:•WinRunner•QuickTest•RationalFunctionalTester•测试管理工具:•TestDirector•TestManager•TrackRecord7.1软件测试自动化基础•测试工具的选择7.2何时进行自动化测试•自动化测试投资阶段:•早投资•在设计时考虑Planning(M0)MajorMilestonePhaseM1,2…ReleasePhaseTimeTestingInvestmentTestingPhase7.3如何进行测试自动化开发•测试自动化的开发流程:•自动测试决定•测试工具获取•自动测试引入过程•测试计划、设计与开发•测试执行与管理•测试评审和评估7.3如何进行测试自动化开发自动化测试生存周期方法学1.自动化测试决定2.测试工具获取3.自动化测试引入过程4.测试计划、设计与开发5.测试执行管理6.测试评审与评估A.系统生存周期过程评估与改进F.生成维护阶段C.小型工具先导/原型D.系统设计与开发阶段B.业务分析与需求阶段E.组装与测试阶段7.3如何进行测试自动化开发•测试自动化的开发过程中需要考虑的问题:•测试需求:除用户需求外,应明确概述能够在大限度发现错误所需要的测试条件。•遵循一定的测试框架。•最大限度的发挥重用。7.4对自动化测试的不正确期望•我们在时间上是紧迫的,项目已经落后了,让我们使用自动化测试吧!•我们要100%的实现测试自动化。•我们不需要进行培训。7.4对测试自动化的不正确期望•正确认识测试自动化•不现实的期望注定测试自动化的失败•测试自动化能:•显著降低重复手工测试的时间•建立可靠、重复的测试,减少认为错误•增强测试质量和覆盖率•测试自动化不能:•完全替代手工测试和手工测试工程师•保证100%的测试覆盖率•弥补测试实践的不足7.5JUnit的使用•7.5.1JUnit简介•7.5.2JUnit的设计方法•7.5.2JUnit的使用步骤•7.5.3测试惯例7.5.1JUnit简介•在JUnit中编写的测试帮助你以一种极大(extreme)的步伐编写程序及快速的找出缺点。•JUnit非常简单•JUnit测试检验其结果并提供立即的回报。•JUnit可以把测试组织成测试系列•JUnit测试是开发者测试。•JUnit测试是以Java写成的,形成一个介于测试及程序代码间的无缝(seamless)边界•JUnit是免费的•JUnit是以两个关键设计样式来设计的:指令样式(Commandpattern)及合成样式(Compositepattern)。•TestCase是一个指令对象。任何包含测试方法的类别都是TestCase的子类别。TestCase可以定义任意数量的testXXX()方法。当你要检查期望与实际的测试结果,你激活assert()方法的各种类型(variaton)。7.5.2JUnit的设计•TestCase子类别包含多个testXXX()方法;•可以使用setUp()及tesrDown()方法初始化及释放测试下的任何一般的对象,这个子类别形同测试的基础设备(fixture)。•每一个测试在其本身基础设备的背景下执行,在每一个测试方法之前呼叫setUp()及之后呼叫tearDown()以确保没有副作用影响测试的执行。7.5.2JUnit的设计•TestCase实例对象可以合成为TestSuite层级架构;•在这个TestSuite层级架构中可以自动激活定义在TestCase实例对象中的所有testXXX()方法。•一个TestSuite是其它多个测试的一个合成对象(composite),其中包括TestCase实例对象及其它的TestSuite实例对象。•这个由TestSuite代表的合成对象行为允许你组合测试的测试系列的测试系列到任意深度,并且自动一致性(uniformly)的执行所有测试以产出个别的通过或失败的状态。7.5.3JUnit的使用步骤•第一步编写一个测试案例•第二步编写一个测试系列•第三步执行测试•第四步组织测试7.5.3JUnit的使用步骤•第一步:编写一个测试案例•(1)定义一个TestCase的子类别。•(2)覆写setUp()方法以初始化测试中的一个或多个对象。•(3)覆写tearDown()方法以释放测试中的一个或多个对象。•(4)定义一个或多个公开的testXXX()方法;这些方法检验这些测试中的对象并且评估期望的结果。7.5.3JUnit的使用步骤——范例代码1下列是一个测试案例的范例:测试案例的范例(ExampleTestCase)importjunit.framework.Test;importjunit.framework.TestCase;importjunit.framework.TestSuite;publicclassShoppingCartTestextendsTestCase{privateShoppingCart_bookCart;privateProduct_defaultBook;/*以特定名称建构一个ShoppingCartTest。建构函数是以测试案例的名称当作参数*/publicShoppingCartTest(Stringname){super(name);}7.5.3JUnit的使用步骤——范例代码2/*设定测试设备在测试案例方法之前呼叫*/protectedvoidsetUp(){_bookCart=newShoppingCart();_defaultBook=newProduct(ExtremeProgramming,23.95);_bookCart.addItem(_defaultBook);}/*释放测试设备在测试案例方法之后呼叫*/protectedvoidtearDown(){_bookCart=null;}7.5.3JUnit的使用步骤——范例代码3/*测试在cart中增加一个产品*/publicvoidtestProductAdd(){ProductnewBook=newProduct(Refactoring,53.95);_bookCart.addItem(newBook);doubleexpectedBalance=_defaultBook.getPrice()+newBook.getPrice();assertEquals(expectedBalance,_bookCart.getBalance(),0.0);assertEquals(2,_bookCart.getItemCount());}/*测试清空cart*/publicvoidtestEmpty(){_bookCart.empty();assertTrue(_b
本文标题:软件测试第七章软件测试自动化
链接地址:https://www.777doc.com/doc-20736 .html