软件测试自动化第9章.ppt
第第9章章 软件测试自动化软件测试自动化本章要点l自动化测试的优点l对自动化测试的认识误区l自动化测试的原理和方法l主流测试工具lWinRunner及其使用9.1 自动化测试概述自动化测试概述1自动化测试的必要性软件的开发过程中,软件测试常需迭代地执行,若不对测试的过程和配置进行有效的管理,则无法很好地完成既定的测试目标。迭代的测试还意味着回归测试的执行。当回归的次数太多,全部依靠人工来完成,任何人都会有难以忍受的感觉。事实上,软件测试本身的特点决定了测试中的很多工作是可以重复执行的,应将它们独立出来,交给测试工具来自动实现。2自动化测试的优点l可以提高软件测试的效率l可对测试配置进行有效的管理,并使测试配置在整个测试生命周期内得到复用l通过测试过程的自动化管理使测试实施方可以通过流程的关键绩效指标来衡量测试过程的一致性和有效性l对测试过程进行规范地定义,提高了测试可靠性l减少了人工测试,在一定程度上降低了测试成本l可以执行一些手工不可能进行的测试l使测试变得更加有趣9.2 自动化测试的引入和实施自动化测试的引入和实施n9.2.1对自动化测试的认识误区(1)自动化测试应完全取代人工测试一般说来,测试过程中80%以上的缺陷是人工测试发现的,仅有不到20%的缺陷是自动化测试发现的,而且这20%要求企业具有较高的自动化测试实施水平。以下列出了可考虑使用自动化测试的情形:对主要功能的测试。容易自动化的测试。人工难以进行的测试。运行最频繁的测试。很快有回报的测试。(2)测试用例可完全由测试工具自动生成测试工具无法自动了解程序的功能,自动生成的测试用例具有很大的局限性。依靠自动测试用例,通常只能发现异常之类的极端错误,大多数一般错误都是无法发现的。因而测试用例主要仍是通过人工设计的。(3)测试工具可以在任何场合使用测试工具都是针对解决特定问题而开发的,有其功能的局限性;而且作为软件,测试工具也存在软件兼容性方面的问题。(4)自动化后测试效率立刻提高一个企业决定引入测试工具实现自动化测试,是需要做大量前期准备工作的l企业在决定引入自动化测试之前,应做技术、资金等多方面做细致的可行性分析。l进行可行性分析后,若决定引入自动化测试,企业还需要做如下一系列工作,为自动化测试的顺利引入创造良好的内部环境。对开发及测试流程进行调整与改进,使之尽量合理、规范。对现有的应用平台进行必要的整合。对人员组织结构进行调整。对需求、设计、编码、维护及配置管理等其他方面的工作进行优化。对相关员工进行培训,包括测试流程、缺陷管理、测试工具使用等。(5)自动化测试顺利引入后就一劳永逸了顺利引入自动化测试工具后,自动化测试能否达到应有的效果还取决于实施过程中的多方面因素l对自动化测试方案是否进行了系统、周密的设计。l对自动化测试实施的监督和评估。n9.2.2自动化测试的实施流程选择测试工具对于特殊的业务需求,自行开发测试工具。全面实施自动化测试之前,可先进行小规模的试验。做自动化测试的需求分析。根据自动化测试的需求分析文档,设计自动化测试方案。应注意设计方案的合理性、全面性、简洁性。进行测试脚本的开发。使用配置管理工具来对脚本进行统一管理和维护,对自动化测试的实施进行监督和评估。9.3自动化测试的原理和方法自动化测试基于的原理和方法主要有:脚本预处理、脚本技术、自动比较技术脚本预处理、脚本技术、自动比较技术。n9.3.1脚本技术测试脚本(TestScript)是一个特定测试对一个特定测试对应的一系列指令(及数据)应的一系列指令(及数据),这些指令可以被测试工具自动执行。脚本是程序的一种形式脚本是程序的一种形式。脚本可通过录制测试的操作产生,再在其基础上做修改;也可以直接用脚本语言编写脚本。脚本中通常含有如下信息:l同步(何时进行下一个输入)。l比较信息。l捕获何种屏幕数据,存储在何处。l从其他数据源读取数据信息。l控制信息。脚本可分为如下几类:n线性脚本n结构化脚本n共享脚本n数据驱动脚本n关键字驱动脚本n9.3.2脚本预处理脚本的预处理是指脚本在被工具执行前必须进行编译,预处理功能通常需要工具支持。脚本预处理的功能主要有美化器、静态分析和一般替换美化器、静态分析和一般替换。l美化器是一种对脚本格式进行检查的工具,必要时对脚本进行转换,以符合编程规范的要求。美化器可以让脚本编写者更专注于技术性的工作。l静态分析对脚本或表格执行更重要的检查功能,检查脚本中出现的和可能出现的缺陷。测试工具通常可以发现一些如拼写错误或不完整指令等脚本缺陷,这类似于程序设计中的PC-Lint和LogiScope的功能。l一般替换也就是宏替换。可以让脚本更明确,易于维护。使用替换时应注意不要执行不必要的替换。n9.3.3自动比较技术是通过在测试的实际输出与预期输出之间完成一次或多次比较在测试的实际输出与预期输出之间完成一次或多次比较来实现的。比较器可以检测两组数据是否相同,功能较齐全的比较器还可标识有差异的内容。但比较器并不能告诉用户测试是否通过或失败,需用户自行判断。自动比较的内容可以是多方面的,包括基于磁盘输出的比较,如对数据文件的比较;基于界面输出的比较,如对显示位图的比较;基于多媒体输出的比较,如对声音的比较;还包括其它输出的内容的比较。自动比较可分为静态比较和动态比较静态比较和动态比较。动态比较是在测试过程中进行比较,静态比较则将测试结果存入数据文件,再通过工具进行比较。还可分为简单比较和智能比较简单比较和智能比较。简单比较查看实际输出与预期输出是否完全相同。智能比较是允许用已知的差异来比较实际输出和预期输出。9.4对产品可测试性的考虑软件产品一般会用到下面三种不同类别的接口:命令行接口(CommandLineInterfaces,简称CLIs)、应用程序接口(API)、图形用户接口(GUI)。API接口和命令行接口比接口和命令行接口比GUI接口容易实现自动化测试。接口容易实现自动化测试。为了降低自动化测试复杂度,应确定被测产品是否包含API接口或命令行接口。有些时候,这两类接口隐藏在产品的内部,需细致地分析才能找到。为了让API接口测试更为容易,应该把接口与某种解释程序,例如Tcl、Perl或者Python绑定在一起。如果没有找到命令行接口或者API接口,开发人员最好对产品进行改造,以提供命令行接口或者API接口,从而支持产品的可测试性9.5测试工具概述n测试工具可为测试管理工具、性能测试工具、功能测试工测试管理工具、性能测试工具、功能测试工具、白盒测试工具具、白盒测试工具,这些产品主要是HPMercury、IBMRational、Segue、Compuware和Empirix等公司的产品,还有相当数量的开源测试工具。n所谓开源工具开源工具是指开放源代码的测试工具。开源测试工具和商业测试工具相比,具有小巧、灵活易扩展、免费的特性。但开源工具缺乏使用培训和技术支持,工具的用户界面一般也较为粗糙。技术水平较高的测试人员,或经费紧张的中小企业,可考虑使用开源工具。n9.5.1主流测试工具(详见书)1测试管理工具2功能测试工具3性能测试工具4白盒测试工具n9.5.2IBMRational软件自动化测试解决方案IBMRational软件自动化测试解决方案的三个最佳成功经验是:尽早测试、连续测试、自动尽早测试、连续测试、自动化测试化测试,并在此基础上提供了完整的软件测试流程和一整套的软件自动化测试工具,为企业自动化测试提供了优良的解决方案。1IBMRational软件自动化测试解决方案的最佳成功经验(1)尽早测试(2)连续测试(3)自动化测试2IBMRational软件测试流程(1)软件测试流程框架IBMRational统一开发流程RUP提供了一套完整的测试流程框架,软件测试团队可以以它为基础,定制符合团队使用的软件测试流程。RUP中的软件测试流程为:l制定测试计划l设计测试l实施测试l执行测试且评估测试l若还需进行回归测试则转,否则结束整个测试流程。(2)利用TestManager实现软件自动化测试流程(详见书)3IBMRational软件自动化测试工具的功能(详见书)(1)实现自动化功能和性能测试(2)实现自动化的可靠性测试和单元测试(3)实现实时系统的自动化测试n9.5.3HPMercury软件自动化测试解决方案HPMercury的应用实施产品率先提供了以业务为中心的生命周期方法,用于优化预生产期间的质量和性能。测试和开发人员可以制定更加明智的“投入使用”决策,减少软件缺陷,节省部署新软件或软件升级所耗费的时间和成本,同时确保应用程序随时都能提供预期的业务功能。可对MercuryQualityCenter和MercuryPerformanceCenter中最重要的几个测试工具做如下分类:测试管理:TestDirector性能测试:LoadRunner功能测试:QuickTestProfessional、WinRunner9.6使用WinRunner进行功能测试n9.6.1WinRunner简介1WinRunner的启动单击WinRunner8.0的桌面图标,或在“程序”菜单中选中WinRunner8.0,可以启动WR。WR启动时,显示如图9-4所示的画面。图9-4WinRunner8.0启动界面n接下来,会出现插件管理器界面供用户加载插件,如图9-5所示。建议在此不要选择所有插件,因为这样可能会对录制或执行脚本造成不良影响。图9-5WinRunner的插件管理器2WR的主界面启动WR后,进入到WR的主界面,可在主界面“File”菜单中点击“Open”,打开一个已有的测试,或点击“New”新建一个测试。当点击“New”新建一个测试后,将进入如图9-6所示的主界面。标题栏标题栏菜单栏菜单栏文件工具栏文件工具栏调试工具栏调试工具栏测试工具栏测试工具栏用户工具栏用户工具栏状态栏状态栏工作窗口工作窗口图9-6WinRunner的主界面n3WinRunner主界面各组成部分的介绍(1)标题栏标题栏显示了目前正在编辑的测试。(2)主菜单菜单包含了WR的所有功能。(3)工具栏在WR的主界面中,有如下几种工具栏:文件工具栏:可通过此工具栏中的工具新建、打开、保存、打印测试文件,设置测试属性,查看测试结果,查看帮助。调试工具栏:可通过此工具栏中的工具调试测试脚本。测试工具栏:可通过此工具栏中的工具选择运行模式、以不同方式录制脚本、运行脚本等。用户工具栏:此工具栏包含了创建测试时常用的命令,用户可对其进行定制。(4)工作窗口工作窗口用于显示当前正在录制或编辑的脚本,如图9-7所示。(5)状态栏状态栏位于WR主界面的底部,显示当前运行状态或所选择的命令。图9-7WinRunner的工作窗口n4WinRunner的测试模式n在WR中,使用录制脚本的方式生成测试时,包括两种录制测试的模式:上下文相关模式上下文相关模式(ContextSensitivemode)和模拟模式模拟模式(Analogmode),如图9-8所示。图9-8使用上下文相关模式n9.6.2WinRunner的测试流程WR的测试流程大致包括六个步骤六个步骤:创建GUImap文件;创建测试脚本;调试脚本;运行测试;检查测试结果;提交缺陷。n1创建GUImap文件在WR中,可以通过GUImap文件来识别被测试应用程序中的GUI对象。一般可以使用两种方式创建GUImap文件:一种是使用RapidTestScriptWizard来自动学习对象,用它来产生GUImap文件。另一种是在录制脚本时,通过用户点击对象,由WR捕捉对象的描述,并将其加入GUImap文件中。n2创建测试脚本测试脚本的创建有录制录制和编程编程两种方式,或两者的组合。在录制测试脚本时,可以在用户想要检查被测试应用程序响应的地方插入检查点检查点(Checkpoint),以确定程序是否能正确运行。这些检查点包括GUI对对象检查点、图像检查点、数据库检查点和象检查点、图像检查点、数据库检查点和文本检查点文本检查点。n3调试脚本在运行测试脚本前,设置运行模式为调试运行调试运行模式模式(DebugRunmode),可以对测试脚本进行调试,如图9-12所示。通过调试,可以较精确地找出出现错误的位置。在实际测试过程中,可以使用WR提供的Step,StepInto,Stepout功能来调试脚本。图9-12设置调试运行模式n4运行测试在运行测试脚本前,设置运行模式为验证验证运行模式运行模式(VerifyRunmode),即可运行脚本来测试应用程序。当WR在运行中碰到检查点时,它会将被测应用程序中的当前数据和以前捕捉的期望数据进行比较,如果发现了任何不匹配,WR将会把目前的情况捕捉下来作为真实的结果。n5检查测试结果测试脚本运行结束后,WR会将执行结果显示在报告中。它描述了所有在运行中碰到的重要事件,例如检查点、错误信息、系统信息或是用户信息。如果发现在运行中有任何不匹配的检查点,可以在测试结果窗口中查看期望的和实际的结果。如图9-13所示。图9-13测试结果窗口n6提交缺陷如果一个测试脚本是由于所测试应用程序中的缺陷而导致执行失败的,可以直接从测试结果窗口中提取缺陷的相关信息。n9.6.3GUIMapn图形用户接口映射n1GUIMapFile模式在创建测试工程时,用户首先要确定GUIMapFile模式。在WR中,有两种GUImapfile 模式:GUI Map File per Test 和Global GUI Map File。nGlobalGUIMapFile模式在这种模式下,可以多个测试脚本共享一个GUIMapFile。在开启测试脚本时,同时加载所使用的全局GUIMapFile即可。产生GlobalGUIMapFile的方法是在录制测试脚本前,让WR全面学习被测软件的所有GUI对象,一般是采用WR中提供的RapidTestScriptWizard功能来完成。这种模式适合已经熟悉了WR使用的用户。n在采用GlobalGUIMapFile模式的情况下,如果在录制脚本时,出现了一些新的GUI对象,WR会自动将其识别下来,并保存在临时的GUI文件中。在WR的GUIMapEditor中,该临时文件显示为*L0文件,如图9-14所示。在这种情况下,要注意将临时GUI文件合并到全局的GUIMapFile中,否则运行脚本时,系统会提示找不到对象。图9-14临时GUI文件nGUIMapFileperTest模式在这种模式下,当用户新建立一个测试脚本时,WR会自动建立此测试脚本的GUIMapFile。当存储测试脚本时,WR会自动储存GUIMapFile。开启测试脚本,WinRunner会自动加载GUIMapFile。总之一切与GUIMapFile有关的动作,都由WR自动处理。因此这种模式很适合初学WR的用户。n2使用RapidTestScriptWizard学习GUI对象(详见书)n9.6.4创建测试WR生成测试工程的方法有两种:自动录制脚自动录制脚本本和手工编写脚本手工编写脚本。后者功能较强,但只适合对WR使用较熟练的测试人员。对初学者,一般使用自动录制脚本方式。在实际应用过程中往往是将这两种方法结合起来,即先使用自动录制脚本方式来创建测试工程,然后再手工添加所需的脚本。n1录制测试脚本测试脚本录制步骤如下:(1)运行WR,单击菜单栏“File”下的“New”菜单项,创建一个新的测试。单击菜单栏“File”下的“Save”,或者工具条上的保存按钮将其保存,文件名为sample_1。需要注意的是,保存脚本文件时,WR会自动创建一个名为sample_1的文件夹,并将脚本文件保存在其中,如图9-27所示。图9-27sample_1文件夹(2)运行Flight4A。(3)单击菜单栏“Test”下的“ContextSensitive”菜单项,开始以“上下文相关”(ContextSensitive)模式录制一个脚本。(4)回到“FlightReservation”窗口,单击菜单栏“File”下的“OpenOrder”菜单,如图9-28。图9-28打开OpenOrder窗口(5)在出现的窗口中,选中OrderNo,输入数字1(表示打开#1号订单),按OK按钮。(6)窗口中将出现所选中记录的内容,如图9-30。图9-30订单记录窗口(7)单击工具条上的Stop按钮,停止录制。(8)保存录制的脚本。n2测试脚本简介WR的测试文件是由测试脚本语言TSL(TestScriptLanguage)组成的文本文件。我们以sample_1脚本文件为例进行介绍,如图9-31所示。图9-31测试脚本示例(4)menu_select_item(File;OpenOrder.)即打开菜单“File”下的“OpenOrder”菜单项。(5)当单击一个对象时,WR会分配给其一个逻辑名称,一般为对象的文本标签(textlabel)。如当单击窗口中的复选框(CheckBox)按钮,WR会生成语句:button_set(OrderNo.,ON),OrderNo为这个对象的逻辑名称,ON代表复选框被选中。(6)当从键盘输入时,WR会将产生一个Type(类型)、obj_type(对象类型)或一个edit_set()描述在脚本中。如本例:在“OrderNo.”文本框中输入数字,则WR会生成语句:edit_set(Edit-1,1);Edit-1为文本框对象的逻辑名,1表示文本框的值为1。(7)button_press(OK)表示单击OK按钮,关闭OpenOrder窗口。更多的帮助请参考WR中的“Help”下的“TSLOnlingReference”。另外,用户可以在WR的工作窗口中,获取帮助。方法是:在脚本中选中某个函数或关键字,然后按F1键。(1)#FlightReservation语句是一条注释语句,在WR中,注释语句均以#开始,WR在打开新窗口时,都会自动增加一行注释。(2)在win_activate(FlightReservation)中,win_activate()函数激活一个窗口,其参数为窗口名称,如本例的FlightReservation。(3)当每次打开一个新的窗口时,WR会加一个set_window()函数,如:set_window(FlightReservation,4);FlightReservation为窗口的名称,4为延时的时间,单位为秒。n3运行测试脚本录制完脚本之后,可以运行测试脚本,让WR模拟用户的操作。本节以上节录制的sample_1脚本为例,介绍如何执行测试脚本。n(1)启动WR和Flight4A,方法如前所述。n(2)选择菜单栏“File”下的“Open”菜单项,或在工具条上单击打开按钮打开sample_1测试脚本。n(3)在工具条上选择Verify模式按钮。n(4)选择菜单栏“Test”下的“RunfromTop”菜单项,或在工具条上单击按钮“FromTop”,系统将弹出一个对话框,如图9-32。图9-32运行测试n(5)选择“TestRunName”,系统默认为res1。这个名称将作为文件夹保存在测试脚本所在文件夹下(sample_1所在文件夹)。选中“Displaytestresultsatendofrun”前的CheckBox,表示运行完脚本后自动弹出结果窗口。n(6)点击“OK”按钮,运行测试。n(7)运行结束,自动显示分析结果。n4分析脚本运行结果(详见书)n9.6.5GUI检查点所谓检查点,是指在WR的脚本中的一定位置,根据需要设置检查条件,以此判断程序的设计、运行是否正确。其主要的思想是判断程序中当前运行值与期望值是否匹配。WR中的检查点分为四类:GUI检查点、文本检查点、图像检查点、数据库检查点。本书主要介绍前三类检查点。下面用一个实例来演示如何使用GUI检查点。1建立GUI对象检查点n(1)启动WR和Flight4A。n(2)创建新的测试文件sample_2。n(3)打开GUIMapfile文件。选择WR菜单栏“Tools”下的“GUIMapEditor”菜单项,启动GUIMapEditor。选择GUIMapEditor菜单栏“Files”下的“Open”菜单项,打开flight4a.GUI文件。该文件是我们在前面的例子中建立的Flight4A系统的全局GUI文件。如图9-35所示。图9-35GUIMapEditor界面n(4)单击WR菜单栏“Test”下的“ContextSensitive”菜单项,开始以“上下文相关”(ContextSensitive)模式录制脚本。n(5)回到“FlightReservation”窗口,单击其菜单栏“File”下的“OpenOrder”菜单项,弹出OpenOrder窗口,如图9-36。图9-36OpenOrder窗口n(6)在OpenOrder窗口中,选中OrderNo,输入数字3,表示打开#3号订单。n(7)单击WR菜单栏“Insert”下的“GUICheckpoint”,选择“ForObject/Window”,则出现手形状光标,然后将此光标指向OpenOrder窗口中的OrderNo文本框,如图9-37。图9-37捕捉OrderNo文本框n(8)双击OrderNo文本框,出现如图9-38所示的CheckGUI窗口。该窗口列出了OpenOrder窗口的检查清单。注意,如果单击OrderNo文本框,则不会出现该窗口,而是直接在WR中生成脚本语句。图9-38CheckGUI窗口n(9)CheckGUI窗口中的右下方是Properties(属性)窗口。该窗口列出了当前Edit_1控件的属性及当前的期望值。选中该属性,就可以编辑该属性的期望值。选中Range属性,单击其Arguments属性列,弹出如图9-39所示的对话框。在该对话框中分别填入1和5,代表该编辑框允许的范围值为15。单击Range属性的ExpectedValue属性列,在文本框中填入3。然后单击OK按钮,回到CheckGUI窗口。图9-39设置属性取值范围n(10)在CheckGUI窗口中,单击OK按钮。此时WR脚本窗口出现设置检查点语句obj_check_gui,如图9-40所示。该函数中,list1.ckl为检查清单文件,gui1是预期输出结果文件。图9-40脚本n(11)回到“OpenOrder”窗口,单击OK按钮,出现如图9-41所示的窗口:图9-413Order记录窗口n(12)单击WR工具条上的“Stop”按钮,停止录制。n(13)在工具条上单击“FromTop”按钮运行该测试文件,测试顺利通过,并显示如图9-42的测试结果。图9-42测试结果窗口2设置错误1n(1)现在修改编辑框Edit_1的期望值。单击WR菜单栏“Insert”下的“GUICheckpoint”,选择“ForMultipleObjects”,启动CreateCheckGUI窗口。单击Open按钮,打开list1.ckl检查清单文件,如图9-43所示。图9-43打开检查清单文件n(2)单击Compare属性的ExpectedValue属性列,在文本框中填入4(在前面的录制脚本的过程中,其值为3),然后单击OK按钮。如图9-44所示。图9-44修改Compare属性的期望值n此时WR脚本窗口出现一条新的设置检查点语句win_check_gui,如图9-45所示。该函数中,此时,预期输出结果文件变成了修改过的gui2。图9-45脚本n(3)在WR工具条上单击“FromTop”按钮,运行该测试文件,测试报错,并弹出图9-46的对话框。图9-46报错对话框n单击“Continue”按钮,完成测试。显示如图9-47的测试结果。图9-47测试结果窗口n在测试结果窗口的信息列表中双击红色显示的第12行错误信息,弹出如图9-48所示的窗口。该窗口清楚地显示了产生错误的原因是由于编辑框Edit_1的期望值与实际值不匹配。图9-48检查点错误信息窗口n3设置错误2n(1)重新修改编辑框Edit_1的期望值。单击WR菜单栏“Insert”下的“GUICheckpoint”,选择“ForMultipleObjects”,启动CreateCheckGUI窗口。单击Open按钮,打开list1.ckl检查清单文件,如图9-43所示。n(2)单击Compare属性的ExpectedValue属性列,在文本框中填入6,单击Range属性的ExpectedValue属性列,在文本框中也填入6,然后单击OK按钮。如图9-49所示。图9-49设置属性的期望值n此时WR脚本窗口出现一条新的设置检查点语句win_check_gui,如图9-50所示。该函数中,此时预期输出结果文件变成了修改过的gui3。图9-50脚本n删除语句win_check_gui(OpenOrder,list1.ckl,gui2,1),并将语句edit_set(Edit_1,3)修改为:edit_set(Edit_1,6)。如图9-51所示。图9-51脚本n(3)在WR工具条上单击“FromTop”按钮运行该测试文件,测试报错,并弹出图9-52所示的对话框。图9-52报错对话框n单击“Continue”按钮,完成测试。显示如图9-53的测试结果。图9-53测试结果窗口n在测试结果窗口的信息列表中双击红色显示的第12行错误信息,弹出如图9-54所示的窗口。该窗口显示产生错误的原因是由于编辑框Edit_1的实际值超出了所允许的范围15。图9-54检查点错误信息窗口4在应用程序不同版本下的测试在这一部分,运行与应用程序Flight4A稍有差异的另一版Flight4B,用以模拟在软件开发过程中软件修改之后,如何使用WR进行测试来检验软件的变化。n(1)先运行Flight4A。n(2)创建新的测试文件sample_3。n(3)打开GUIMapfile文件(方法如前所述)。n(4)单击WR菜单栏“Test”下的ContextSensitive菜单项,开始以“上下文相关”(ContextSensitive)模式录制脚本。n(5)回到“FlightReservation”窗口,单击其菜单栏“File”下的“OpenOrder”菜单项,弹出“OpenOrder”窗口,在“OpenOrder”窗口中,选中“OrderNo”,输入数字3,表示打开#3号订单,单击OK按钮,出现如图9-41窗口。此时,再单击菜单栏“File”下的“FaxOrder”菜单项,弹出如图9-55所示的窗口。图9-55FaxOrder界面n(6)单击WR菜单栏“Insert”下的“GUICheckpoint”,选择“ForMultipleObjects”,启动CreateCheckGUI窗口。单击Add按钮,出现手形状光标,然后将手形状分别点击FaxOrderNo.3窗口中的Class、Tickets、TicketPrice、From、To文本框,如图9-56所示。图9-56捕捉窗口中的对象n(7)单击鼠标右键,关闭对象捕捉,返回CreateCheckGUI窗口。点击OK按钮,关闭CreateCheckGUI窗口。单击WR工具条上的Stop按钮,停止录制。此时WR脚本窗口出现设置检查点语句,如图9-57所示。图9-57脚本n(8)保存测试文件。在工具条上单击按钮FromTop运行该测试文件,测试顺利通过。n(9)关闭Flight4A,运行Flight4B。n(10)在WR工具条上单击按钮FromTop运行该测试文件,测试报错,并弹出图9-58的对话框。图9-58报错对话框n单击“Continue”按钮,完成测试。显示如图9-59的测试结果。图9-59测试结果窗口n在测试结果窗口的信息列表中双击红色显示的第18行错误信息,弹出如图9-60的GUICheckpointResults窗口,该窗口显示产生错误的原因有两处。图9-60检查点错误信息窗口n9.6.6文本检查点使用WR提供的文本检查点功能,可以获取程序界面中的图像或GUI对象上的文字,然后再通过手工编写测试脚本的方法来检查文字是否正确。使用文本检查点,主要可完成如下功能:l验证某个值是否在一定范围内l计算数值是否正确文字检查点的建立过程是:当用户指定要读取文字的区域、对象或窗口时,WR会以win_get_text或obj_get_text函数读取文字,并将读取到的文字储存到变量中,然后再以手工编写测试脚本的方式,检查变量中的文字是否为预期的文字。注意:如果是验证标准的GUI对象如按钮、功能选单等上的文字,建议用GUI检查点,以省去手动编写测试脚本的不便。下面用一个实例来演示如何使用文字检查点,该例子的主要功能是检查记事本文件内容的变化。n(1)启动WR。n(2)创建新的测试文件sample_4。n(3)打开Windows下的记事本,填入如图9-61所示的数据,并保存为recorder.txt。图9-61recorder.txtn(4)单击菜单栏“Test”下的ContextSensitive菜单项,以“上下文相关”模式录制一个脚本。n(5)单击WR菜单栏“Insert”下的“GetText”,选择“ForObject/Window”。此时,出现手形状光标,将手形状指向recorder记事本窗口的编辑区,如图9-62,单击鼠标右键。停止捕捉,回到WR主界面。图9-62修改后的recorder.txtn(6)单击WR工具条上的Stop按钮,停止录制。此时WR脚本窗口出现检查点语句obj_get_text,如图9-63所示。其中前三条注释语句是WR捕捉到的文本信息。该信息保存在obj_get_text函数的参数text变量中。图9-63脚本n(7)为了设置文字检查点,在脚本语句obj_get_text之后添加条件判断语句,如图9-64所示。如果text变量的信息与if条件匹配,则在测试结果窗口返回通过信息“Textiscorrect!”,否则返回失败信息。图9-64脚本n(8)在工具条上单击按钮FromTop,运行该测试文件,测试顺利通过,并显示如图9-65的测试结果。图9-65测试结果窗口n(9)修改recorder记事本文件,将002号记录的AGE改为20,保存文件。然后在运行sample_4测试文件,测试报错,并显示如图9-66的测试结果。图9-66测试结果窗口9.6.7图像检查点针对应用程序中的图像,WR提供了图像检查点(BitmapCheckpoint),它是以像素点(Pixel)为单位来比较图像。WR使用三种方式建立图像检查点:l屏幕区域:以鼠标拖拽的方式确定图像检查点的区域。l窗口:以整个窗口作为图像检查点的区域。lGUI对象:以整个GUI对象作为图像检查点的区域。WR能够直接取得方框区域部分并储存成预期值,然后在测试脚本中插入obj_check_bitmap或win_check_bitmap函数(用以判断所建立的图像检查点是针对区域、GUI对象还是窗口对象)。当运行测试脚本时,WR会比对运行时的图像与预期的图像,将结果显示在TestResults窗口中,如果有不一致,系统会报错,并在TestTesults窗口显示错误信息。下面用一个实例来演示如何使用图像检查点。n(1)启动WR和Flight4A。n(2)创建新的测试文件sample_5。n(3)打开GUIMapfile文件。选择WR菜单栏“Tools”下的“GUIMapEditor”菜单项,启动GUIMapEditor。选择GUIMapEditor菜单栏“Files”下的“Open”菜单项,打开flight4a.gui文件。n(4)单击菜单栏“Test”下的ContextSensitive菜单项,开始以“上下文相关”模式录制一个脚本。n(5)单击“FlightReservation”窗口的菜单栏“File”下的“OpenOrder”菜单项,弹出OpenOrder窗口。在OpenOrder窗口中,选中OrderNo,输入数字1,表示打开#1号订单。单击OK按钮。n(6)单击菜单栏“File”下的“FaxOrder”菜单项,出现FaxOrderNo.1窗口。在Faxnumber输入10位数的传真号码(可以是任意数字),如图9-67所示。图9-67输入传真号n(7)移动FaxOrder对话窗口。n(8)按F2快捷键或者单击工具列上的Record按钮,此时录制模式将从ContextSensitiveMode切换到AnalogMode。n(9)在AgentSignature编辑框中签下用户的名字(使用鼠标画图),如图9-68所示。图9-68签名n(10)按F2快捷键或者单击工具列上的Record按钮,此时录制模式将从AnalogMode切换到ContextSensitiveMode。n(11)单击WR菜单栏“Insert”下的“BitmapCheckpoint”,选择“ForObject/Window”。使用手形状鼠标指向AgentSignature签名窗口,然后单击该窗口,如图9-69所示。此时WR将捕获一个Bitmap,并在脚本中插入Obj_Check_Bitmap声明语句。图9-69捕捉签名窗口n(12)单击CleareSignature按钮,清除签名。n(13)为清除签名后的签名窗口创建一个BitmapCheckpoint。步骤同(11)。n(14)在FaxOrderNo.1对话窗口中单击Cancel按钮,关闭窗口。n(15)停止录制,保存sample_5。保存临时GUI文件到全局的GUIMapFile:flight4a.gui。系统生成的有关图像检查点脚本语句如图9-70。图9-70脚本n(16)在工具条上单击FromTop按钮,运行该测试文件,测试顺利通过,并显示如图9-71的测试结果。图9-71测试结果窗口n(17)关闭Flight4A,运行Flight4B。n(18)在WR工具条上单击按钮FromTop,运行该测试文件,测试报错,并弹出图9-72的对话框。图9-72报错窗口n(19)单击“Continue”按钮,完成测试。显示如图9-73的测试结果。图9-73测试结果窗口n(20)在测试结果窗口的信息列表中双击红色显示的第54行错误信息,弹出如图9-74的Bitmap窗口。该窗口清楚地显示了产生错误的原因是由于img7.bmp的期望值与实际值不匹配。这是由于Flight4B程序的FaxOrderNo.窗口的ClearSignature按钮(参看图9-68)是失效的。所以无法将前面的签名清除。需要说明的是,这是系统有意设计的错误,主要是为了模拟软件开发中的一些错误。图9-74Bitmap对比9.6.8使用函数生成器WR提供了强大的函数生成器,来帮助用户编写测试脚本。在本节通过一个简单的例子来学习如何使用函数生成器来编写测试脚本。该例子使用的测试程序仍然是Flight4A,主要功能是验证Flight4A程序的FaxOrder对话框中的票数、票价及总额字段是否正确。n(1)启动WR和Flight4A。n(2)创建新的测试文件sample_6。n(3)打开GUIMapfile文件。选择WR菜单栏“Tools”下的“GUIMapEditor”菜单项,启动GUIMapEditor。选择GUIMapEditor菜单栏“Files”下的“Open”菜单项,打开flight4a.gui文件。n(4)单击菜单栏“Test”下的ContextSensitive菜单项,开始以“上下文相关”模式录制一个脚本。n(5)单击“FlightReservation”窗口的菜单栏“File”下的“OpenOrder”菜单项,弹出OpenOrder窗口。在OpenOrder窗口中,选中OrderNo,输入数字5,表示打开#5号订单。单击OK按钮。n(6)单击菜单栏“File”下的“FaxOrder”菜单项,出现FaxOrderNo.5窗口,如图9-75。图9-75FaxOrder窗口n(7)单击Cancel按钮,关闭FaxOrderNo.5窗口。单击WR工具条上的Stop按钮,停止录制。保存sample_6,保存临时GUI文件到全局的GUIMapFile:flight4a.gui。脚本文件如图9-76所示。图9-76脚本n(8)在脚本的最后一行(Button_Pr