《软件测试技术及应用》实验指导书Word文件下载.docx
《《软件测试技术及应用》实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《《软件测试技术及应用》实验指导书Word文件下载.docx(77页珍藏版)》请在冰豆网上搜索。
目录
第一章概述1
1.1软件测试的发展1
1.2软件测试自动化2
1.2.1自动化测试的优势2
1.2.2涉及的基本知识介绍3
第二章IBMRationalFunctionalTester简介5
2.1概述5
2.1.1IBMRFT的类层次结构5
2.1.2IBMRFT脚本6
2.2IBMRFT的功能和界面6
2.2.1主要功能6
2.2.2主要组件7
第三章实验案例10
3.1启用IBMRFT12
3.1.1查看RationalFunctionalTester的功能视图12
3.1.2熟悉脚本的录制和回放13
3.2录制脚本18
3.2.1创建数据验证点18
3.2.2创建属性验证点22
3.2.3创建属性验证点24
3.2.4在脚本中插入定时器26
3.2.5将记录插入活动的FunctionalTest脚本28
3.3回放脚本并查看结果29
3.3.1回放脚本、查看结果29
3.3.2查看特定的日志30
3.3.3从包含一个验证点的脚本查看回结果31
3.3.4使用验证点比较32
3.3.5在脚本中插入断点33
3.3.6设置FunctionalTester首选项35
3.4扩展脚本37
3.4.1创建消息框37
3.4.2覆盖首选项设置39
3.4.3处理一个意外的活动窗口41
3.4.4创建一个Java帮助类,并把意外活动窗口代码放进去43
3.5使用测试对象映射47
3.5.1显示测试对象映像47
3.5.2创建并使用一共享对象映射48
3.5.3修改测试对象映射51
3.6管理对象的识别53
3.6.1设置识别评分阈值53
3.6.2设置基础模式识别55
3.7数据驱动测试56
3.7.1在FunctionalTester中创建数据驱动56
3.7.2导入数据池60
3.7.3导出数据池66
参考文献72
第一章概述
软件工程诞生于1968年,是北大西洋公约组织(NorthAtlanticTreatyOrganization,NATO)在讨论应对“软件危机”的对策的过程中提出的一个概念,意图通过工程化的生产方式使软件走上工业化道路,从而解决“软件危机”所带来的“危害”。
而软件测试贯穿于软件项目的整个过程,是软件质量保证的重要手段。
软件测试通过在软件项目各个阶段进行的不同目的及内容的测试活动,来保证各个阶段的正确性。
对整个软件工程来说,软件测试在保证产品质量、科学控制成本、保证软件可靠性、提高企业竞争力等方面都有着十分重要的作用。
[1]
本章介绍软件测试的发展,包括软件测试如何一步步走向自动化测试的过程,以及自动化测试的基本概念等。
读者可从中了解软件测试的重要性、手工测试和自动化测试的比较、自动化测试中需要注意的问题等。
1.1软件测试的发展
软件测试是伴随着软件的产生而产生的。
早期的软件开发过程中,软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。
对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。
到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。
这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。
人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证(SQA)的主要职能,包含软件质量评价的内容,BillHetzel在《软件测试完全指南》(CompleteGuideofSoftwareTesting)一书中指出:
“测试是以评价一个程序或者系统属性为目标的任何一种活动。
测试是对软件质量的度量。
”这个定义至今仍被引用。
软件测试已有了行业标准(IEEE/ANSI),1983年IEEE提出的软件工程术语中给软件测试下的定义是:
“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。
这个定义明确指出:
软件测试的目的是为了检验软件系统是否满足需求。
它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。
软件测试已成为一个专业,需要运用专门的方法和手段,需要专门人才和专家来承担。
进入上世纪90年代,软件行业开始迅猛发展,软件的规模变的非常大,在一些大型软件开发过程中,测试活动需要花费大量的时间和成本,而当时测试的手段几乎完全都是手工测试,测试的效率非常低;
并且随着软件复杂度的提高,出现了很多通过手工方式无法完成测试的情况,尽管在一些大型软件的开发过程中,人们尝试编写了一些小程序来辅助测试,但是这还是不能满足大多数软件项目的统一需要。
于是,很多测试实践者开始尝试开发商业的测试工具来支持测试,辅助测试人员完成某一类型或某一领域内的测试工作,而测试工具逐渐盛行起来。
人们普遍意识到,工具不仅仅是有用的,而且要对今天的软件系统进行充分的测试,工具是必不可少的。
测试工具可以进行部分的测试设计、实现、执行和比较的工作。
通过运用测试工具,可以达到提高测试效率的目的。
测试工具的发展,大大提高了软件测试的自动化程度,让测试人员从繁琐和重复的测试活动中解脱出来,专心从事有意义的测试设计等活动。
采用自动比较技术,还可以自动完成测试用例执行结果的判断,从而避免人工比对存在的疏漏问题。
设计良好的自动化测试,在某些情况下可以实现“夜间测试”和“无人测试”。
在大多数情况下,软件测试自动化可以减少开支,增加有限时间内可执行的测试,在执行相同数量测试时节约测试时间。
而测试工具的选择和推广也越来越受到重视。
在软件测试工具平台方面,商业化的软件测试工具已经很多,如捕获/回放工具、Web测试工具、性能测试工具、测试管理工具、代码测试工具等等。
这些都有严格的版权限制且价格较为昂贵,无法自由使用。
当然,一些软件测试工具开发商对于某些测试工具提供了Beta测试版本以供用户有限次数使用。
幸运的是,在开放源码社区中也出现了许多软件测试工具,已得到广泛应用且相当成熟和完善。
[2]
1.2软件测试自动化
1.2.1自动化测试的优势
通常,软件测试的工作量都很大(占软件总开发时间的40%-60%),并且有相当一部分测试工作都适合使用工具完成。
因此,在软件产品的质量要求越来越高的今天,软件测试的自动化逐步被软件开发人员认可和青睐。
那么,使用自动化测试工具都有哪些好处呢?
1.节约时间,提高工作效率
由于测试工作繁琐且需要保证测试质量,测试人员就不得不花费较多的时间进行测试的前期计划和测试用例的设计工作。
而使用测试工具进行自动化测试,无疑会节省测试人员的时间,在测试的实施中不用过多的人工干预,从而提高工作效率,这成为一个明显的优势。
2.易于进行回归测试
新版本的程序发布之后,往往需要进行之前已有的测试,这叫作回归测试。
一些软件产品的研发中,新版本往往与旧的版本在功能、界面上非常相似甚至完全相同,若对这部分使用自动化测试,就会轻松达到测试每个功能的目的。
由于新版本经过了频繁的修改,进行回归测试再合适不过。
此时,使用自动化测试工具,对之前已经运行过的测试重新执行,便会高效地完成回归测试。
3.可以进行一些手工测试难以完成或不可能完成的测试
在软件测试中,有些非功能方面的测试,如压力测试、并发测试、回归性测试、大数据量测试,用人来测试是不可能实现的。
例如,对于淘宝网站进行1600个用户同时在线的测试,用手工进行并发操作的测试几乎是不可能的,但是用自动化测试工具就可以模拟来自1600个用户的同时登录。
另外,测试工具还可以发现一些手工测试不可能发现的问题,如内存方面的问题等。
4.测试具有一致性和可重复性
软件被修改发生微小变化时,手工测试是难以发现的。
而使用自动化测试工具进行测试时,由于每次回归测试的脚本是完全相同的,因此每次测试的过程是完全一致的,不会漏掉软件中任何小的修改,这是手工测试不可能做到的。
当然,自动化测试的优势远远不止这些,可以通过参考书查阅,在长期的测试工作过程中深刻体会。
1.2.2涉及的基本知识介绍
在自动化测试的工具和技术应用中,读者需要掌握的基本知识或本书后续章节会用到的基本概念如下:
1.对象的有效拆分
软件开发的任务是将多个独立对象进行组合,形成一套客户端程序。
而测试则是将整个程序拆分成一个个的对象,检测某个或某些对象属性是否符合测试需求,如某textBox的文本内容是否与预期相同。
测试时拆分的原则是,分解程序中不同类型的对象,或根据测试路径筛选测试对象。
2.测试的智能化处理
软件测试过程中,对产品的不同版本有些对象的变化我们并不想过多关心,如某个按钮的各属性在新旧版本之间发生了变化,但按钮的大小变化一般不是我们感兴趣的内容,此时便可以采用模糊识别。
那么,到底如何处理对象的各个属性感兴趣的程度呢?
可以将不同权重赋予对象的不同属性。
按钮的文本我们关心,可以将权重设置大一点,按钮的大小不关心,可以将权重设置小一点,最后算出总的分数,如大于某个阈值,则认为测试通过,否则测试失败。
3.ClassicsCD应用程序
ClassicsInc.是一个发展迅速的连锁店,出售经典的音乐、电影和书籍等,到2005年为止在全国开有127家连锁店。
为了帮助管理ClassicsCD产品的销售情况和存货,设计了ClassicsCD应用程序,其使用者为商店的经理和店员。
为了保证成功订货,需要测试ClassicsCD。
订货的关键数据有订购数量、信用卡号、信用卡类型和有效期等。
职员典型的操作顺序是启动ClassicsCD应用程序->
选择货物->
登录到顾客账户->
完成数据输入->
订购成功。
实验步骤参见实验3.0。
4.脚本录制和回放过程
设定测试环境->
设定录制选项->
启动录制->
执行用户动作->
插入验证点->
结束录制->
复位环境->
设定回放选项->
回放脚本->
查看分析结果。
5.验证点
在设计测试时,一个重要的因素就是决定何时以及如何确认应用程序符合预期,这就需要在环境中设计验证点。
验证点是一个脚本中创建的某一个要点,用于在运行过程中确定待测应用的状态,而不再需要通过视觉判断程序是否通过测试,代之以自动测试。
可以说,若没有验证点就不叫测试。
一般把以下对象作为数据验证点:
下拉列表、菜单分级结构、表格、文本、树结构、状态等。
6.脚本支持命令
是在脚本录制过程中可以随时添加的一些辅助工程,操作方便。
包括调用脚本、日志录入、记时器、休眠、注释、剪贴板等。
详见实验3.2.4等。
除此之外,还有一些相关概念,在实验过程中逐步理解,这里不一一赘述。
第二章IBMRationalFunctionalTester简介
2.1概述
RationalFunctionalTester(以下简称RFT)是一个面向对象的、自动测试工具,它使您能够测试各种应用程序。
通过录制一个应用程序的测试您可以很快产生测试脚本,您还可以测试这个应用程序之中的任何对象,包括这个对象的属性和数据。
RFT可以给您提供一个编写脚本语言的机会和两种开发环境:
Eclipse框架中的Java™或者Microsoft™VisualStudio™开发系统中的Microsoft™VisualBasic™.NET。
这意味着,无论您开发小组的成员使用什么样的语言或者平台,您都应该能够将它们与RationalFunctionalTester集成起来,并且您在开发自动化测试的时候能够利用它们的一些功能。
2.1.1IBMRFT的类层次结构
如果你使用的是RationalFunctionalTesterJavascripting,那么测试脚本是使用Java语言进行编写的。
一个FunctionalTester的测试脚本存在于一个类的层次结构中,并从相应的父类继承而来。
下面的图显示了这个类的层次级别和每一个特定的级别所提供的功能。
图2-1FunctionalTester的类层次结构
•RationalTestScript类:
提供了基础的功能,它是所有FunctionalTester测试脚本的根层次。
每一个测试脚本都从这个类扩展而来,例如,你能够重载缺省的事件处理器(eventhandler)来提供你自己的应用程序特定的事件处理器。
•helpersuper类:
(可选的)提供了对基础级别方法的重载的支持。
•scripthelper类:
提供了为访问测试对象和验证点特定的脚本方法。
这些特定脚本的方法简化了脚本命令并改进了FunctionalTester脚本的可读性。
但是你不应该去编辑scripthelper类。
•FunctionalTesterscript类:
包含了被录制的或者脚本化的命令,这些命令构成了一个特定的功能测试。
你能够通过与FunctionalTester项目相关联的模板文件定制FunctionalTesterscript类和scripthelper类的格式。
2.1.2IBMRFT脚本
一个FunctionalTester脚本是一个由Java语句组成的文本文件,它是由FunctionalTester在录制脚本过程中生成的,并且可以向其中手工添加语句。
当测试脚本被回放时,FunctionalTester通过执行脚本中的语句来重现功能测试的动作。
一个FunctionalTester脚本包括四个主要的语句分类:
∙由RationalTestScript继承的方法,比如,startApp()和logTestResult()。
∙在测试对象上调用的方法,比如Click()或者Drag()。
∙执行验证点的语句。
∙任何你需要的但没有被FunctionalTester生成的Java代码。
如果你没有手工修改脚本,在FunctionalTester脚本中的第一条语句应该startApp()语句。
例如:
publicvoidtestMain(Object[]args)
{startApp("
ClassicsJavaA"
);
....}
startApp()方法的参数是你要启动的应用程序的名字。
因为FunctionalTester脚本应该能够在不同的计算机和操作系统下被执行的,因此FunctionalTester将应用的启动信息存储在一个配置文件中,而不是脚本中。
2.2IBMRFT的功能和界面
2.2.1主要功能
1.回放更新的应用程序脚本
ScriptAssure特性是RationalFunctionalTester的对象识别技术,可以使您成功地回放脚本,甚至在您的被测应用程序已经更新的时候。
您可以为测试对象必须通过的、用来作为识别候选的识别记分设置门槛,并且如果RationalFunctionalTester接受了一个分值高于指定门槛的候选,您还可以向日志文件中写入警告。
2.更新对象的识别属性
在测试对象地图中,您可以对所选的测试对象更新识别到的属性。
RationalFunctionalTester显示了UpdateRecognitionProperties页,其显示出更新的测试对象属性、原始的识别属性和对象所有的识别属性。
如果必要,您可以修改更新的识别属性。
3.合并多个测试对象映射
对象映射要么是共享的要么是专用的。
专用映射附属于一个脚本并只由具体的脚本进行访问,反之,共享的映射由多个脚本共享。
共享映射的优势是,当需要更新对象时,只有对应一个映射的一个更新会确定多个脚本。
您可以在RFT的项目视图中并且在创建新测试对象映射时,将多个私有的或共享的测试对象映射合并成一个单个的共享测试对象映射。
RFT可以随意地更新您所选择的指向新合并的测试对象映射的脚本。
4.显示相关的脚本
在测试对象地图中,您可以观察到与列表与映射相关的脚本,且可以使用该列表来选择要添加测试对象的多个脚本。
5.使用基于模式的对象识别
您可以用正则表达式或一个数值范围来代替允许基于模式的识别。
允许对象识别具有更好的灵活性。
您可以将属性转变成验证点编辑器(VerificationPointEditor)或测试对象地图中的正则表达式和数值范围。
正则表达式计算器(RegularExpressionEvaluator)允许您在编辑表达式时进行测试,这节省下了不得不运行脚本观察模式是否工作的时间。
6.集成UCM
RFT在ClearCase统一变更管理(UnifiedChangeManagement,UCM)的视图中。
RFT中创建的工件是可以进行版本控制的。
2.2.2主要组件
在本课程中我们将集中使用Eclipse框架中的Java的RationalFunctionalTester。
本章节将为您展示RFT的用户界面。
当您启动RationalFunctionalTesterForJava时,您会看到带有八个主要组件的TestPerspective窗口:
主菜单、工具栏、Project视图、Java编辑器、ScriptExplorer、Console视图、Tasks视图和状态栏。
下面是对每个组件的简要描述。
1.主菜单
您可以在RationalFunctionalTester的在线帮助中读到关于主菜单中每个选项的内容。
2.工具栏
工具栏中包含这些图标:
OpentheNewWizard--显示适当的对话框来创建许多项中的一个或录制FunctionalTest脚本。
单击以显示要创建的可能项列表。
CreateNewFunctionalTestProject--显示出一个对话框,让您在FunctionalTest中生成新工程。
ConnecttoanExistingFunctionalTestProject--显示出一个让您连接到现有工程的对话框。
CreateanEmptyFunctionalTestScript--显示出一个让您创建您可以用来手动地添加Java代码的脚本的对话框。
CreateNewTestObjectMap--显示出一个让您向工程添加一个新的测试对象地图的对话框。
CreateNewTestDatapool--显示出一个让您创建一个新的测试数据库的对话框。
CreateaNewTestFolder--显示出一个让您为工程或现有文件夹创建一个新文件夹的对话框。
RecordaFunctionalTestScript--显示出一个让您输入关于新脚本的信息并开始记录的对话框。
InsertRecordingintoActiveFunctionalTestScript--在当前脚本的光标位置开始记录,这使您启动应用程序、插入验证点,并添加脚本支持功能。
ConfigureApplicationsforTesting--显示ApplicationConfiguration工具,其使您添加并编辑配置信息--例如名称、路径和其他用于开始并执行应用程序的信息--关于您要测试的Java和HTML应用程序。
EnableEnvironmentsforTesting--显示出一个您用来启动Java环境和浏览器及配置JRE和浏览器的对话框。
DisplaytheTestObjectInspectorTool--显示出TestObjectInspector工具,使您显示测试对象信息,如父层次、继承层次、测试对象属性、无值属性和方法信息。
InsertVerificationPoint--显示VerificationPointandActionWizard的SelectanObject页,其使您在您要测试的应用程序中选择对象。
InsertTestObjectintoActiveFunctionalTestScript--显示出一个让您选择测试对象来向测试对象地图和脚本中添加的对话框。
InsertDataDrivenCommandsintoActiveFunctionalTestScript--显示出DatapoolPopulationWizard的DataDriveActions页,其使您选择被测应用程序中的对象来数据驱动应用程序。
ReplaceLiteralswithDatapoolReference--用测试脚本中的数据库参考代替文字值,其使您向现有的测试脚本中添加现实数据。
RunFunc