版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
自动测试工具QTP使用第一页,共89页。本章小结QTP的测试脚本开发
QTP的基本功能
QTP的安装和配置
本章内容提要:第二页,共89页。12.1QTP的安装和配置12.1.1QTP的安装(下面以WindowsXP为例介绍如何安装QTP10.0)(1)单击QuickTestProfessional安装程序,程序引导安装。(2)出现许可协议安装界面,选择“我接受该许可证协议中的条款”,点击“是”。(3)在弹出的许可证类型中选择“单机版”,点击“下一步”。(4)填写注册信息,点击“下一步”。维护号是随着你的QuickTestProfessional包装提供的。(5)在弹出的启用QuickTestProfessional远程执行界面中选择“自动设置这些选项”,点击“下一步”。(6)在设置InternetExplorer高级选项中选择“我将手动选择这些选项”,点击“下一步”。(7)在选择安装类型界面中,选择“完全”,点击“下一步”。(8)自定义安装的目标文件夹。(QTP及其插件的安装仅支持英文路径,也就是说不能在包含中文命名的文件夹目录中安装QTP或QTP的插件。)(9)等待安装,安装完成后弹出客户注册界面(不用点击“立即注册”),点击“下一步”。(10)完成后,在之后弹出的界面中选择“重启电脑”,点击“完成”。(11)重启完成后,在界面中单击“完成”,出现图12-1所示界面。点击“取消”。第三页,共89页。12.1QTP的安装和配置安装完原程序后,将GetLicense.exe注册机放到安装目录(默认为C:\ProgramFiles\MercuryInteractive\QuickTestProfessional)并运行它,注册机将生成一个注册文件,该文件在C:\ProgramFiles\CommonFiles\MercuryInteractive\LicenseManager。用记事本打开名字为lservrc的文件,复制第一行中含#之前的所有字符。第一次运行时,选择seatlicence,将前面复制的字符粘贴。第四页,共89页。12.1QTP的安装和配置12.1.2QTP10.0的基本配置(1)QTP的帮助文档很多初学者往往忽略了对QTP自带的帮助文档的学习,而实际上,这些正是最佳的学习QTP使用和自动化测试脚本开发的渠道。可以通过选择“开始|所有程序|QuickTestProfessional|Documentation”来访问QTP的帮助文档。当然,也可以在QTP中随时按F1键打开联机帮助。(2)QTP自带的样例程序
QTP在安装时会把一个样例程序也安装到机器上,可以通过选择“开始|所有程序|QuickTestProfessional|SampleApplications”来查看和打开样例程序。样例程序包括一个Windows程序和一个Web程序。Windows程序名为“Flight”,是一个机票预定系统。
Web应用程序名为“MercuryToursWebSite”,是一个连接到URL为“./”的网站,且基于Web的机票预定系统。样例程序可以为初学者提供一个基本的测试对象,另外,QTP的很多帮助文档都是以这些样例程序为测试对象讲述相关的测试方法、测试对象和函数的使用的,因此,熟悉这些样例程序对于学习QTP大有裨益。(3)启动QTP
安装好QTP后,我们可以通过选择菜单“开始|所有程序|QuickTestProfessional|QuickTestProfessional”来启动QTP(或者双击桌面上QTP的快捷图标)。第五页,共89页。12.1QTP的安装和配置(4)插件加载设置与管理启动QTP后,将显示如图12-2所示的插件管理界面。
QTP默认支持ActiveX、VB和
Web插件,License类型为“Built-In”。如果安装了其他类型的插件,也将在列表中列出来。为了性能上的考虑,以及对象识别的稳定和可靠性,建议只加载需要的插件。例如,QTP自带的样例应用程序Flight是标准Windows程序,里面的部分控件类型为ActiveX控件,因此,在测试这个应用程序时,可以仅加载ActiveX插件。第六页,共89页。12.1QTP的安装和配置(5)创建一个空的测试项目加载插件后,QTP显示如图12-3所示界面。
●选择“Tutorial”将打开
QTP的帮助文档
●选择“StartRecording”
进入测试录制功能
●选择“OpenExisting”将打开现有的测试项目文件
●选择“BlankTest”将创建一个空的测试项目把“Showthisscreenonstartup”
设置为不勾选,则下次启动QTP时不显示该界面,而是创建一个空的测试项目。第七页,共89页。12.1QTP的安装和配置(6)使用QTP编写第一个自动化测试脚本图12-4Flight程序界面设置成仅录制Flight程序后,选择菜单“Automation|Record”,或按快捷键F3,QTP将自动启动指定目录下的Flight程序,出现如图12-4所示的界面,并且开始录制所有基于Flight程序的界面操作。第八页,共89页。12.1QTP的安装和配置
这时,如果在其他应用程序的界面上做任何的操作,QTP并不会将其录制下来,而是仅录制与Flight程序相关的界面操作。按F4键停止录制后,将得到如图12-5所示的录制结果。在关键字视图中,可看到录制的测试操作步骤,每个测试步骤涉及的界面操作都会在ActiveScreen界面显示出来。第九页,共89页。12.1QTP的安装和配置
切换到专家视图界面,则可看到如图12-6所示的测试脚本,这样就完成了一个最基本的测试脚本的编写。第十页,共89页。12.2QTP的基本功能QTP的基本功能
提供给初级用户使用的关键字视图
提供给熟悉VBScript脚本编写的自动化测试工程师使用的专家视图
第十一页,共89页。12.2QTP的基本功能识别对象ObjectSpy的使用对象库管理
把测试对象添加到对象库中
导出对象库文件
在测试脚本中访问对象库的测试对象
添加新的Action
关联Action的对象库
编辑新的
Action
在函数库中创建自定义函数●12.2.1编辑测试脚本第十二页,共89页。12.2QTP的基本功能1.识别对象编辑测试脚本的第一步是识别测试对象,因为基于GUI的自动化测试主要是围绕着界面的控件元素来进行的。QTP针对不同语言开发的控件,采取不同的对象识别技术,根据加载的插件来选择相应的控件对象识别的依据。在QTP中,选择菜单“Tools|ObjectIdentification”,在出现的界面中可看到各种标准Windows控件对应的对象识别方法,例如,对于Dialog控件,使用的是“is
child
window”、“is
owned
window”、“nativeclass”和“text”这四个控件对象的属性来区别出一个唯一的Dilalog控件对象。可以单击“Add/Remove”按钮,选择更多的控件属性来唯一识别控件。第十三页,共89页。12.2QTP的基本功能2.ObjectSpy的使用
QTP提供的“ObjectSpy”工具可用于观察运行时测试对象的属性和方法。选择菜单“Tool|ObjectSpy”,则出现ObjectSpy的界面。在界面中,单击右上角的手型按钮,移动到测试对象上,单击鼠标左键选择测试对象,会自动获取该测试对象的所有属性和方法,在界面中可以显示出来。在界面中可以看到,所选中的是标准Windows控件中的“Dialog”对象。切换到“Methods”页,则可以看到控件方法,如“Activate”、“Click”、“Close”等。
ObjectSpy对于观察测试对象的属性,了解测试程序的控件属性和行为都非常有用,尤其是对于那些界面控件元素比较多、层次关系比较复杂的应用程序。第十四页,共89页。12.2QTP的基本功能3.对象库管理另外一种观察和了解测试程序的界面控件元素,以及它们的层次关系的方法是通过对象库(“ObjectRespository”)。在QTP中,选择菜单“Resources|ObjectRepository”出现界面。
QTP在录制测试脚本的过程中会把界面操作涉及的控件对象都自动添加到对象库中,但是那些未被鼠标点击或键盘操作的界面控件则不会添加到对象库中。第十五页,共89页。12.2QTP的基本功能4.把测试对象添加到对象库中在对象库管理界面中,选择菜单“Objects|AddObjectstoLocal”,然后选择测试程序界面中的某个控件,例如,选择Flight程序的“Login”界面中的“Cancel”按钮,在出现的界面中单击“OK”,把测试对象添加到对象库中。从右边的对象属性窗口中可看到,对于“Cancel”这个“WinButton”类型的控件,QTP使用“Text”和“Nativeclass”两个属性来唯一区分和识别。这两个属性将作为测试脚本运行时找到测试程序界面上的相应控件的依据。界面中的某些控件对象是有层次关系的,例如,按钮、输入框等控件包含在窗口控件中,在添加测试对象到对象库时,可以选择窗口对象,然后在界面中选择“AllObjectTypes”,单击“OK”按钮,则会把选择的窗口对象中的所有控件对象添加到对象库中。第十六页,共89页。12.2QTP的基本功能5.导出对象库文件测试对象作为资源,可导出到文件中,以方便其他测试脚本的使用,方法是在对象库管理界面中,选择菜单“LocalObject”,将其存储到某个文件夹中。第十七页,共89页。12.2QTP的基本功能6.在测试脚本中访问对象库的测试对象把界面的控件作为测试对象添加到对象库中之后,就可以把这些测试对象作为测试资源来访问,例如,在关键字视图中可从对象库中选择需要的测试对象。而在专家视图中,同样可以访问到对象库的测试对象,以及它们的属性和方法。第十八页,共89页。12.2QTP的基本功能7.添加新的Action
在QTP中,“Action”相当于测试脚本的文件,可使用Action来划分和组织测试流程,例如,把一些公用的操作放到同一个Action中,以便重用。如果想在当前Action的某个测试步骤之后添加新的Action,则可选择菜单“Insert|CalltoNewAction”,在出现的界面中“Name”里输入Action的名称,例如“Action_Help”,在“Description”中输入对该Action的描述,例如“处理Help窗口”,在“Location”中选择“Afterthecurrentstep”,然后,单击“OK”按钮,返回关键字视图,则可看到新的名为“Action_Help”的Action已经被成功添加,如图12-7所示。第十九页,共89页。12.2QTP的基本功能8.关联Action的对象库双击新添加的Action,可在该Action中添加新的测试代码。由于QTP为每一个Action生成相应的测试文件和目录,而对象库作为资源,也是与Action绑定的,因此,新添加的Action不能直接使用前一个Action中的测试对象。解决方法有两种,一种是通过录制新的测试脚本来产生新的测试对象库,另外一种是通过关联前一个Action所导出的对象库文件来使用其测试对象。下面介绍第二种方法。第二十页,共89页。12.2QTP的基本功能
选择菜单“Resources|AssociateRepositories”
在出现的界面中单击“+”按钮,选择前一个Action导出的数据库文件,然后,把左边的“AvailableActions”
中的“Action-Help”移动到右边的“AssociatedActions”列表中
这样,就可以在“Action-Help”
的测试脚本中使用Action1
的对象库中的测试对象,打开对象库,在“Action”的下拉框中选择“Action-Help”,可以看到“Action-Help”可用的测试对象。第二十一页,共89页。12.2QTP的基本功能9.编辑新的Action
为新的Action建立了对象库之后,就可以在测试脚本中访问和使用这些测试对象。例如,可在专家视图的脚本编辑器中输入以下代码。Dialog(“Login”).WinBotton(“Help”).Click打开帮助页面Dialog(“Login”).Dialog(“FlightReservations”).ActivateDialog(“Login”).Dialog(“FlightReservations”).WinBotton(“确定”).Click’单击“确定”按钮关闭帮助页面这些代码在Action-Help的关键字视图中能够对应地体现出来。第二十二页,共89页。12.2QTP的基本功能10.在函数库中创建自定义函数创建自定义函数的方法如下。1、选择菜单“Insert|FunctionDefinitionGenerator”2、在出现界面“FunctionDefinition”中的“Name”输入框中输入函数的名称,在“Type”中选择“Function”,在“Scope”中选择“Public”,在“Description”中输入函数的描述信息。3、单击“OK”按钮,则会在当前Action的测试代码中,添加函数框架代码。在这里可以简单地写一个函数,用于往测试报告中添加一条信息。4、添加完函数代码后,就可以在测试代码中调用这个函数,调用方法有两种,一种是在专家视图中编写代码调用,只需要简单地输入函数名即可;另外一种方法是在关键字视图中,通过选择菜单“Insert|StepGenerator”,选择“Category”为“Functions”,选择“Library”为“Localscriptfunctions”,然后选择“Operation”为“Test1”即可。在添加对Test1的调用后,在关键字视图中可看到,新加了一个测试步骤“FunctionCall”。第二十三页,共89页。12.2QTP的基本功能●
12.2.2调试测试脚本1.语法检查2.使用断点3.单步调试4.调试查看器的使用
在编辑好测试脚本后,在运行测试之前,可利用QTP的语法检查功能和脚本调试功能对测试脚本的逻辑进行检查。第二十四页,共89页。12.2QTP的基本功能1.语法检查选择菜单“Tools|CheckSyntax”,或者按快捷键“CTRL+F7”对测试脚本进行语法检查,如果语法检查通过,则在“Information”界面(可通过选择菜单“View|Information”打开)提示信息“Thesyntaxisvalid”,表示语法检查通过。如果语法检查发现有问题,则会在Information界面中列出详细的信息,包括语法错误的信息描述,出现在哪个Action的哪行代码,双击该提示信息,将转到相应的测试脚本的代码行。第二十五页,共89页。12.2QTP的基本功能2.使用断点语法检查通过后,可直接运行测试脚本,也可设置断点对脚本进行调试。然后,按F5键运行测试脚本,运行过程中将在断点所在的代码行停住。3.单步调试这时候,可以选择菜单“Debug|StepOver”,或者按快捷键“F10”跳到下一行代码,也可以选择“Debug|StepInto”,或者按快捷键“F11”进入代码行中所调用的函数“Test1”。第二十六页,共89页。12.2QTP的基本功能4.调试查看器的使用
在调试过程中,可选择菜单“View|DebugViewer”,在如图所示的界面中,输入测试对象属性或变量,查看其值。
如果安装了VisualStudio.NET2008,则可以增强QTP的调试能力,在“DebugViewer”中可以查看到对象的大部分属性。可以通过安装VisualStudio.NET2008来增强QTP调试能力,也可以不安装,仅仅把其中一个名为PDM.DLL的文件拷贝到“C:\ProgramFiles\CommonFiles\MicrosoftShared\VS7DEBUG”目录中,然后注册一下即可,注册方法是在命令行中输入“RegSVR32“C:\ProgramFiles\CommonFiles\MicrosoftShared\VS7DEBUG\pdm.dll"”。第二十七页,共89页。12.2QTP的基本功能●
12.2.3运行测试脚本1.运行整个测试对运行整个测试测试脚本进行语法检查和调试都无误后,可以按F5键运行整个测试脚本。在运行测试之前,可以对运行做必要的设置,以便满足测试的要求。选择菜单“Tools|Options”,在出现的界面里,在“Run”页中的“Runmode”,可选择运行模式为“Normal”或“Fast”。如果选择“Normal”,则QTP以尽可能快的速度运行测试脚本中的每一个测试步骤;如果选择“Normal”,则可以进一步设置测试运行过程中每一个步骤直接的停顿时间,这种设置有利于测试人员在QTP执行测试的过程中查看测试的整个过程,看是否如预期的设计一样执行测试。第二十八页,共89页。12.2QTP的基本功能2.运行部分测试如果有多个Action,则可以定位到需要运行的Action,然后,选择菜单“Automation|RunCurrentAction”来仅仅运行当前的Action,这种方式有利于单独运行Action,查看单个Action测试执行的情况,有利于定位当前Action运行的问题。还有另外一种方式可以用于运行部分的测试,方法是选中某个测试步骤,然后单击鼠标右键,选择菜单“RunFromStep”,可以从当前选中的测试步骤开始运行测试,也可以选择“RunToStep”,开始测试,并运行到当前所选的测试步骤。第二十九页,共89页。12.2QTP的基本功能3.批量运行测试可以使用QTP自带的工具“TestBatchRunner”运行测试脚本,需要在QTP中选择菜单“Tools|Options”,打开界面,确保“AllowotherMercuryproductstoruntestsandcomponents”选项被勾选上。然后,通过选择“开始|所有程序|QuickTestProfessional|Tools|TestBatchRunner”启动TestBatchRunner。在TestBatchRunner中,选择“Batch|Run”来批量运行列表中的所有测试脚本。第三十页,共89页。12.2QTP的基本功能●
12.2.4分析测试结果1.选择测试运行结果的存储位置在QTP中,按F5键运行测试脚本,会出现如图所示的对话框。
在这里,可以选择测试运行结果存储的位置,如果选择“Newrunresultsfolder”,可以为本次测试选择一个目录用于存储测试结果文件;如果选择“Temporaryrunresultsfolder”,则QTP将运行测试结果存放到默认的目录中,并且覆盖上一次该目录中的测试结果。如果希望保存每次测试运行的结果,则应该选择“Newrunresults
folder”,如果测试脚本处于调试和检查分析阶段,觉得没必要保存每次运行的测试结果,则可以选择“Temporaryrunresultsfolder”。第三十一页,共89页。12.2QTP的基本功能2.查看概要测试运行结果测试脚本运行结束后,可在图的界面中查看概要的测试结果信息,包括测试的名称、测试开始和结束的时间、测试脚本运行的迭代次数、测试通过的状态等。第三十二页,共89页。12.2QTP的基本功能3.查看检查点的结果在测试结果的左边窗口中,用树型结构展示了所有测试步骤,选择节点Checkpoint“Login”,检查点检查的是Login窗口的“text”属性是否等于“Login”,如果检查结果是“Passed”,表示检查通过。4.查看测试过程的截屏如果设置了运行时保存截屏的选项,则可以在测试结果的“ScreenRecorder”中,查看测试步骤对应的界面截屏。如果“Savemovietoresults”设置为“Always”,则会把所有测试过程的操作录制下来,单击“Play”按钮,就可以像放电影一样把测试过程回放出来。这样可以直观地看到测试的过程,如果测试过程出现问题,则可以查看出现问题前的界面操作,看是什么界面操作或数据的输入导致了错误的出现。屏幕截屏的设置方法是:在QTP中,选择菜单“Tools|Options”,在弹出的界面中,把“Savemovietoresults”勾选上,并且在下拉框中选择“Always”。第三十三页,共89页。12.3
QTP测试脚本开发●
12.3.1录制/回放测试脚本
在这一节中我们使用QuickTest录制一个测试脚本,在MercuryTours范例网站上预定一张从纽约(NewYork)到旧金山(SanFrancisco)的机票。第三十四页,共89页。12.3
QTP测试脚本开发1.执行QuickTest并开启一个全新的测试脚本
11、开启QuickTest,在“Add-inManager”窗口中选择“Web”选项,点击“OK”关闭“Add-inManager”窗口,进入QuickTestProfessional主窗口22、如果QuickTestProfessional已经启动,检查“Help|AboutQuickTestProfessional”,查看目前加载了哪些add-ins。如果没有加载“Web”,那么必须关闭并重新启动QuickTestProfessional,然后在“Add-inManager”窗口中选择“Web”33、如果在执行QuickTestProfessional时没有开启“Add-inManager”,则点击“Tool|Options”,在“General”标签页勾选“DisplayAdd-inManageronStartup”,在下次执行QuickTestProfessional时就会看到“Add-inManager”窗口了。第三十五页,共89页。12.3
QTP测试脚本开发(1)选中“Test>Record”或者点选工具栏上的“Record”按钮。打开“RecordandRunSettings”对话窗口,如图所示。(2)在“Web”标签页选择“Openthefollowingaddresswhenarecordorrunsessionbegins”。(3)在“Type”下拉列表中选择“MicrosoftInternetExplorer”为浏览器的类型;在“Address”中添加(网站地址),这样,在录制的时候,QuickTest会自动打开IE浏览器并连接到MercuryTours范例网站上。2.开始录制测试脚本第三十六页,共89页。12.3
QTP测试脚本开发(4)现在我们再切换到“WindowsApplication”标签页。(5)如果选择“Recordandruntestonanyopenbrowser”单选按钮,则在录制过程中,QuickTest会记录你对所有的Windows程序所做的操作。如果选择“Recordandrunontheseapplication(openedwhenasessionbegins)”单选按钮,则在录制过程中,QuickTest只会记录对那些添加到下面“Applicationdetails”列表框中的应用程序的操作(你可以通过“Add”、“Edit”、“Delete”按钮来编辑这个列表)。(6)我们选择第二个单选按钮。因为我们只是对MercuryTours范例网站进行操作,不涉及Windows程序,所以保持列表为空。(7)点击“确定”按钮,开始录制,将自动打开IE浏览器并连接到MercuryTours范例网站上。第三十七页,共89页。12.3
QTP测试脚本开发3.登录MercuryTours网站在用户名和密码输入界面输入注册时使用的账号和密码,点击“Sign-in”,进入“FlightFinder”网页,如图所示。第三十八页,共89页。12.3
QTP测试脚本开发4.输入订票数据输入以下订票数据:DepartingFrom:NewYorkOn:May14ArrivingIn:SanFranciscoReturning:May28ServiceClass:Businessclass其他字段保留默认值,点击“CONTINUE”按钮,打开“SelectFlight”页面。5.选择飞机航班可以保存默认值,点击“CONTINUE”按钮,打开“BookaFlight”页面。6.输入必填字段输入用户名和信用卡号码(信用卡可以输入虚构的号码,如8888-8888)。点击网页下方的“SECUREPURCHASE”按钮,打开“FlightConfirmation”网页第三十九页,共89页。12.3
QTP测试脚本开发7.完成定制流程查看订票数据,并选择“BACKTOHOME”,回到MercuryTours网站首页。8.停止录制在QuickTest工具列上点击“Stop”按钮,停止录制。到这里已经完成了预定“纽约—旧金山”机票的动作,并且QuickTest已经录制了从按下“Record”按钮后到“Stop”按钮之间的所有操作。9.保存脚本选择“File|Save”或者点击工具栏上的“Save”按钮,开启“Save”对话窗口。选择路径,填写文件名,我们将其取名为Flight。点击“保存”按钮进行保存。第四十页,共89页。12.3
QTP测试脚本开发●
12.3.2自主开发测试脚本1.增量式调试脚本
2.测试脚本的同步3.已签核,通过了同行评审4.录制、回放隐藏的对象5.安排重运行脚本
/储存执行日志6.为关键的脚本创建自动的消息通知7.编制文档8.实行测试脚本的版本控制9.坚持测试脚本命名标准和存储
要构建更易维护的和健壮的自动化测试脚本有很多技巧。在自动化测试工具QTP中,下面有对文档化测试脚本、调试测试脚本、执行测试脚本的同行评审和同步测试脚本方面的建议。第四十一页,共89页。12.3
QTP测试脚本开发1.增量式调试脚本录制测试脚本,和其他的软件开发成果一样,会变得非常大。为了可以成功地回放,需要调试几百行的代码,为了参数化的数据驱动测试脚本,它可能包含了几个数据集。常见的调试测试脚本方法是首先录制所有的业务流程和需求,然后测试人员回放测试脚本以验证并纠正问题。第四十二页,共89页。12.3
QTP测试脚本开发2.测试脚本的同步测试工具会用比终端用户手工按键快得多的速度回放已录制的测试脚本。接着由于应用程序可能不够快地显示数据或从数据库取出数值以允许测试脚本正确地回放,这可能会击垮所测试的应用程序。当测试地应用程序不能响应测试脚本时,脚本执行会突然中断,然后需要用户干涉。为了同步所测试应用程序和回放中地测试脚本,测试小组在已录制的测试脚本中引入了人为的等待时间。为了放慢测试脚本的执行,嵌入在测试脚本中的等待时间是最任意的且通过试验和错误最佳估计。等待时间主要的问题是它们要不是等的太长就是不够长时间。第四十三页,共89页。12.3
QTP测试脚本开发3.已签核,通过了同行评审作为测试准备审核标准的一部分,测试脚本应该被正式地接受并且在开始测试循环之前被批准。4.录制、回放隐藏的对象脚本可能被录制为增加或是双击表格中一个字段或字段位置没有被固定的一个数组的值。如果表格或数组中字段的位置从开始录制时就不断地变化,脚本可能在回放时会失败。测试脚本经常在回放中失败就是因为那些没有显示或在屏幕中可见的对象的位置发生了改变。
为了回放那些位置敏感或位置受变更影响的脚本,有必要用功能性增强脚本,确保需要回放的隐藏对象将可以被识别、增加或是双击而无需考虑其在矩阵、表格、显示的屏幕上的位置。第四十四页,共89页。12.3
QTP测试脚本开发5.安排重运行脚本/储存执行日志为了绕过测试工具不能在安排测试脚本上重运行的局限,测试人员可以通过可以支持多种命令行安排测试脚本。测试应该将执行日志存储在一个共享的驱动盘或针对审核的测试结果的测试管理工具中。第四十五页,共89页。12.3
QTP测试脚本开发6.为关键的脚本创建自动的消息通知可以用错误处理程序逻辑增强测试脚本,当错误发生时它可以不断地发送错误信息给无限设备或email地址。一些测试脚本是关键性的业务并且可能在午夜批量地运行。正确并成功运行这些关键性业务的测试脚本会作为其他自动化任务的一个前提条件。第四十六页,共89页。12.3
QTP测试脚本开发7.编制文档为了使测试脚本可重用并且更容易维护,文档化所有和执行测试脚本,测试脚本的头文件,任何执行测试脚本的特殊条件相关的信息。此外,脚本中需要包含一个描述性的有特别用途的文件头。脚本的文件头应该包括脚本的作者、所有者、创建和修改日期,脚本可以追溯到的需求识别符,脚本所支持的业务范围,以及脚本中的变量和参数数量。在测试脚本中提供这些信息可使以后的测试工作中的脚本的执行、修改和维护更容易些。第四十七页,共89页。12.3
QTP测试脚本开发8.实行测试脚本的版本控制为了构建中的自动化测试脚本的库和存储库,建议对自动化测试脚本实行版本控制。版本控制帮助追踪测试脚本中的变更,并可维护同一测试脚本的多个版本。9.坚持测试脚本命名标准和存储测试脚本应当遵循项目公认的命名标准。遵循这些技巧使测试人员能够为组织构建更强健的测试脚本。第四十八页,共89页。12.3
QTP测试脚本开发●
12.2.3脚本语言VBScript简介IIIIIIVBScript
1.脚本语言简介2.VBScript语言基础3.VBScript与正则表达式
第四十九页,共89页。12.3
QTP测试脚本开发1.脚本语言简介
VBScript是脚本语言,它与其他脚本语言有很多共同的特点,例如变量无关、解释执行等。
VBScript是VisualBasic的一个安全子集,其设计目的是在多平台上运行并能使用ActiveX接口,这些特性不仅使其适合于Windows管理、网页脚本编程,而且适合于开发测试脚本。QTP使用的是5.6版本的VBScript。目前,很多自动化测试工具为用户提供的测试脚本编程语言都是所谓的“厂商语言”,即对某种编程语言的有限实现,或经过改造的编程语言的子集,这些语言会有很多方面的限制。而QTP基本上完全采用了VBScript,VBScript中的大部分函数和对象都能在QTP中直接使用。第五十页,共89页。12.3
QTP测试脚本开发2.VBScript语言基础使用任何一门语言都需要一个熟悉的过程,这个过程可以从了解语言的基本构成、数据类型、基本语法等方面开始。(1)VBScript的数据类型在VBScript中,只有一种数据类型,就是Variant。Variant是一种特殊的数据类型,它可以包含各种不同的信息,这取决于其如何被使用。一个Variant可以是数字,也可以是字符串,当它作为数字使用时,可以进行加减乘除等数学运算,当它作为字符串使用时,可以进行字符串连接、大小写转换等操作。第五十一页,共89页。12.3
QTP测试脚本开发(2)变量子类型
VBScript的Variant可以进一步区分成各种特定的数据类型。
Empty:未初始化的Variant。对于数值变量而言是0,对于字符串而言,则为零长度的字符串。
NULL:不包含任何有效数据的Variant。
Boolean:布尔变量,值为True或False。
Byte:0到255之间的整数。
Integer:-32768到32768之间的整数。
Currency:-922337203685477.5808到922337203685477.5807。
Long:-2147483648到2147483647之间的整数。
Single:单精度浮点数,负数范围从-3.402823E38到-1.401298E-45之间,正数范围从1.401298E-45到3.402823E38之间。
Double:双精度浮点数,负数范围从-1.79769313486232E308到-4.947E-324之间,正数范围从4.947E-324到1.79769313486232E308之间。
Date(Time):日期型,日期范围从公元100年1月1日到公元9999年12月31日。
String:字符串型,最大长度可为20亿个字符。
Object:包含对象。
Error:包含错误号。可用VarType函数来返回某个数据的Variant子类型。第五十二页,共89页。12.3
QTP测试脚本开发(3)VBScript的变量在VBScript中只有一种基本数据类型Variant。因此,所有变量的数据类型都是Variant。变量的声明可以用Dim语句,例如,下面的代码定义了多个变量:DimTop,Bottom,Left,Right(4)VBScript的运算符
VBScript支持完整的运算符操作,例如算术运算符、比较运算符、连续运算符和逻辑运算符。字符串连接使用“&”运算符。另外,也可以使用“+”运算符做字符串连接运算。(5)VBScript的条件语句在VBScript中,可以使用两种条件语句来控制脚本流程,分别是If···Then···Else语句,和SelectCase语句。If···Then···Else语句可以按需要进行嵌套。第五十三页,共89页。12.3
QTP测试脚本开发3.VBScript与正则表达式在自动化测试过程中,经常需要对大量的文本数据进行查找,对字符串进行比较、匹配,从而判断测试结果是否正确。这时候,就需要用到正则表达式。(1)正则表达式简介正则表达式提供了功能强大、灵活而又高效的方法来处理文本,利用正则表达式的全面模式匹配表达法,可以快速分析大量文本,从而找到特定的字符模式。正则表达式对于处理字符串(例如分析HTML、日志文件等)的应用来说是必不可少的工具。第五十四页,共89页。12.3
QTP测试脚本开发(2)在VBScript中使用正则表达式在VBScript中,使用RegExp对象来支持正则表达式的使用。RegExp提供了三个属性和三个方法。属性如下。Pattern:用于描述正则表达式的匹配模式,例如,用“+”匹配前面的表达式一次或多次,用“.”匹配除换行符\n之外的任何字符。Global:用于设置搜索过程中是仅匹配第一个还是全部匹配。IgnoreCase:用于设置匹配字符串时是否区分大小写。方法如下。Test:用于对指定的字符串执行一个正则表达式搜索,并返回一个布尔值,表示是否找到匹配的模型。Replace:用于替换在正则表达式中查找到的文本。Execute:用于对指定的字符串执行正则表达式搜索。Execute方法返回一个Matchs
集合,其中包含了在指定的字符串中找到的每一个匹配项。第五十五页,共89页。12.3
QTP测试脚本开发(3)正则表达式在自动化测试中的使用正则表达式在自动化测试中可能起到意想不到的效果。例如,测试QTP的“Flight”程序,选择航班的功能界面。在录制脚本里,对WinList控件的操作使用的是Select方法,但是需要指定一长串的字符串。如果WinList控件的选择方法Select的参数仅需要输入航班信息中的航班号就能选择所在的行,则会方便很多,而且更有利于测试的参数化。第五十六页,共89页。12.3
QTP测试脚本开发●
12.3.4描述性编程的使用
QTP中使用描述性编程
视图与对象模型
描述性编程(descriptiveprogramming)第五十七页,共89页。12.3
QTP测试脚本开发(1)创建测试或组件首先可以通过在应用程序或网站上录制会话,或者建立对象库并使用关键字驱动功能向关键字视图中手动添加步骤来创建测试或组件。在QTP里面我们可以通过两种方式添加步骤来创建测试或组件。①在应用程序或网站上录制会话。②建立对象库并使用这些对象在关键字视图或专家视图中手动添加步骤。然后在测试或组件中插入检查点,检查页面、对象或文本字符串中的特定值或特征,通过它可以标识网站或应用程序是否正常运行。或是通过用参数替换固定值扩展测试或组件的范围。提供数据表中的数据,定义环境变量和值,定义测试、组件或操作参数和值,或者使用QTP生成随机数字或当前用户和测试数据等。最后如果需要的话使用QTP中众多的功能测试功能来增强测试或组件,或添加编写语句来实现更复杂的测试目标。1.QTP中使用描述性编程第五十八页,共89页。12.3
QTP测试脚本开发(2)运行测试和组件控制运行会话,帮助标识和消除测试或组件中的缺陷。使用“单步执行”、“单步跳过”和“单步退出”命令逐步运行测试或组件,或设置断点使测试或组件在预定点暂停。每当测试或组件在断点处停止时,可以在“调试查看器”中查看其变量的值。(3)分析结果在运行测试或组件之后,通过两种方式可以查看其结果:在“结果”窗口中查看结果;自动报告在运行会话过程中检测到的缺陷,可能的话并上报到其他缺陷管理产品中。第五十九页,共89页。12.3
QTP测试脚本开发2.视图与对象模型1支部特色2KeywordView(关键字视图,在早期的版本中称为TreeView)ExpertView(专家视图)
第六十页,共89页。12.3
QTP测试脚本开发15432KeywordView(关键字视图)
通过关键字视图,QTP提供了一种模块化的表格格式创建和查看测试或组件的步骤每个步骤在关键字视图中都是一行,这样用户可以轻松地修改任何一部分组成在录制会话过程中,用户在应用程序上执行的每个步骤在关键字视图中记录为一行使用的人可以很清晰地看到被录制对象的录制层次及运行步骤,比较适合那些对于业务操作流程熟悉的人员使用但是,如果需要一些增强型的操作,那就需要切换到专家视图里进行了。第六十一页,共89页。12.3
QTP测试脚本开发ExpertView(专家视图)
QTP在关键字视图中的每个节点在专家视图中对应一行脚本。对于QTP来说,其核心编码语言是VisualBasicScript,因此,如果用户熟悉VBScript,可以运用自如地添加和更新语句,并通过编程方式增强测试和脚本,而这一切必须在专家视图中完成。更为重要的是,有些操作是必须在专家视图中才可以完成的,例如:要处理动态对象、客户化报告、获取对象运行时的属性值(Run-timeValue)等,这些都必须通过专家视图中的VBScript编码完成。然而,QTP里所有的操作都是基于对象进行的,所以我们必须对对象模型有一个基本了解,才可以在专家视图内进行描述性编程。第六十二页,共89页。12.3
QTP测试脚本开发测试对象模型
测试对象模型是一大组对象类型或类,QTP用这些对象类型或类来表示应用程序中的对象。每个测试对象类都有一个可以唯一标识属于该类的对象的属性列表,以及一组QTP可以对其进行录制的方法。它包括测试对象(TestObject)和运行时对象(RunTimeObject)。测试对象是QTP在测试或组件中创建的用于表示应用程序中的实际对象的对象。QTP存储有关该对象的信息,这些信息有助于它在运行会话期间标识和检查该对象。运行时对象是网站或应用程序中的实际对象,在运行会话期间执行针对该对象的方法。第六十三页,共89页。12.3
QTP测试脚本开发如果录制时执行应用程序的相应操作,则一般情况下QTP将完成以下操作。QTP●标识QTP测试对象类(表示执行了操作的对象),并创建相应的测试对象。●读取应用程序中对象属性的当前值,然后将属性和属性值列表与测试对象一起存储。●选择该对象的唯一名称,一般使用该对象某个重要属性的值。●使用适当的QTP测试对象方法录制对对象执行的操作。●运行测试或组件时,QTP通过其测试对象类及其描述(一组用于唯一标识该对象的测试对象属性和属性值)来标识应用程序中的每个对象。测试对象及其属性和属性值的列表存储在对象库中。第六十四页,共89页。12.3
QTP测试脚本开发3.描述性编程(descriptiveprogramming)(1)描述性编程概述通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(ObjectRepository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(ObjectDescription)来添加相应的方法。因为QTP对象库中的每个对象都具有唯一名称,所以在引用时对象名是必须需要指定的。然后在测试运行期间,QTP在对象库中根据这个对象的名称和父对象来查找对象,并使用为这个测试对象存储的测试对象描述,在网站或应用程序中标识该对象。第六十五页,共89页。12.3
QTP测试脚本开发
假设只有且仅有一个Yahoo主页面,那么我们可以用下面的方法
Window("Text:=Yahoo!-MicrosoftInternetExplorer").Close
我们可以看到语句里我们要查找的对象是Window窗口,标题为“Yahoo!-MicrosoftInternetExplorer”,然后把它关闭,具体的语法说明我们稍后解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面”,如果有多个同样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP不知道应该对哪个对象进行关闭动作。我们需要进一步地缩小匹配范围:Dimii=0while(Window("Text:="Yahoo!"-MicrosoftInternetExplorer","index:="&i).exist)Window("Text:=Yahoo!-MicrosoftInternetExplorer","index:="&i).closei=i+1wend
这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等,依次类推。第六十六页,共89页。12.3
QTP测试脚本开发(2)直接在语句中输入编程描述
通过多个指定描述对象的property:=value对,可以直接在语句中描述对象,这是最直接有效的方法。常规语法为:TestObject("PropertyName1:=PropertyValue1","...","PropertyNameX:="PropertyValueX""}
TestObject-测试对象的类。
PropertyName:=PropertyValue-测试对象的属性及其值。各个property:=“value”对之间应用逗号和引号分开。第六十七页,共89页。12.3
QTP测试脚本开发
例如:在QTP产品缺省安装里面自带了一个网上订机票的示例,称为MercuryTour,我们看一下在订票过程中何时需要用描述性编程。首先登入系统后,如果需要订票,就要先搜索航班,此时系统要求输入订票乘客的数量,假设我们在第一次录制脚本时选择了1个乘客,并成功完成订票。然后,我们需要参数化乘客数量来测试订票系统,我们会发现回放会失败。原因在于,不同的乘客的数量导致在订票时需要输入每个乘客的姓名,而录制时,只输入了一个乘客的姓名。而乘客姓名的输入框是随着乘客数量的变化而动态生成的,我们不可能从对象库里得到没有录制的对象,因此必须使用描述性编程。在录制单个乘客时,我们得到的录制语句是:
Browser("Welcome:MercuryTours").Page("BookaFlight:Mercury").WebEdit("passFirst0").Set"Michael"Browser("Welcome:MercuryTours").Page("BookaFlight:Mercury").WebEdit("passLast0").Set"Wang"第六十八页,共89页。12.3
QTP测试脚本开发
显然WebEdit(“passFirst0”)和WebEdit(“passLast0”)是录制时产生的对象并存放到对象库里的。通过对象库,我们可以看到对象的属性如下:系统对于发生多个FirstName时,命名规则是passFirst0,passFirst1…依次类推。因此只要通过简单的描述性编程就可以完成动态FirstName与LastName的识别工作。这里我们假设参数化的乘客数已经赋值给intPassNum。下面是脚本中的关键语句:
counter=0Fori=0to(intPassNum)Browser("FindaFlight:").Page("BookaFlight:").WebEdit("name:="passFirst""&i).Set"Michael"Browser("FindaFlight:").Page("BookaFlight:").WebEdit("name:="passLast""&i).Set"Wang"counter=counter+1Next第六十九页,共89页。12.3
QTP测试脚本开发(3)使用description对象
使用Description对象可以返回包含一组Property对象的Properties集合对象。Property对象由属性名和值组成。然后,可以在语句中指定用返回的Properties集合代替对象名。(每个Property对象都包含一个属性名和值)。要创建Properties集合,可以使用以下语法输入Description.Create语句:SetMyDescription=Description.Create()
创建Properties对象后,就可以输入语句,以便在运行会话期间在Properties对象中添加、编辑、删除或检索属性和值。这样,就可以在运行会话期间,使用动态方法确定哪个属性以及多少个属性应包含在对象描述中。在Properties集合中填充一组Property对象(属性和值)后,可以在测试语句中指定用Properties对象代替对象名。第七十页,共89页。12.3
QTP测试脚本开发例如,假设我们需要完成以下一个操作:
Window("Error").WinButton("text:=OK","index:="1"").Click我们可以通过Description对象来实现同样的功能,参考下面的代码:
SetMyDescription=Description.Create()MyDescription("text").Value="OK"MyDescription("index").Value=1Window("Error").WinButton(MyDescription).ClickSetMyDescription=Nothing第七十一页,共89页。12.3
QTP测试脚本开发●
12.3.5数据驱动脚本1.数据驱动测试方法12测试脚本的开发和维护是自动化测试的重要环节,适当地调整和增强测试脚本,能提高测试脚本的灵活性,增加测试覆盖面,以及提高应对测试对象变更的能力。数据驱动方式的测试脚本开发是解决这类问题的重要手段。什么时候使用数据驱动测试方法数据驱动测试的一般步骤第七十二页,共89页。12.3
QTP测试脚本开发1什么时候使用数据驱动测试方法
如何让测试脚本执行时,不仅仅局限于测试录制或编辑时的测试数据呢?数据驱动的测试方式是解决这个问题的最佳方案。数据驱动测试把测试脚本中的测试数据提取出来,存储到外部文件或数据库中,在测试过程中,从文件动态读入测试数据。如果希望测试的覆盖面更广,或者让测试脚本能适应不同的变化情况,则需要进行测试脚本的参数化,采用数据驱动的测试脚本开发方式。
自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低。测试回放的只是录制时作出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和测试数据。第七十三页,共89页。12.3
QTP测试脚本开发2数据驱动测试的一般步骤
通常,数据驱动测试按以下步骤进行:●参数化测试步骤的数据,绑定到数据表格中的某个字段。●编辑数据表格,在表格中编辑多行测试数据(取决于测试用例以及测试覆盖率的需要)。●设置迭代次数,选择数据行,运行测试脚本,每次迭代从中选择一行数据。QTP提供了一些功能特性,让这些步骤的实现过程得以简化。例如,使用“DataTable”视图来编辑和存储参数,另外,还提供“DataDriver向导”,用于协助测试员快速查找和定位需要进行参数化的对象,并使用向导进行一步一步的参数化过程。第七十四页,共89页。12.3
QTP测试脚本开发2.参数化测试在QTP中,可以通过把测试脚本中固定的值替换成参数的方式来扩展测试脚本,这个过程也叫参数化测试,能有效地提高测试的灵活性
1、通过参数化测试来提高测试的灵活性
2、参数化测试步骤
3、使用随机数来进行参数化4、参数化检查点
5、设置数据表格迭代方式第七十五页,共89页。12.3
QTP测试脚本开发(1)通过参数化测试来提高测试的灵活性可以通过参数化的方式,从外部数据源或数据产生器读取测试数据,从而扩大测试的覆盖面,提高测试的灵活性。在QTP中,可以使用多种方式来对测试脚本进行参数化。数据表参数化(DataTableParameters)是其中一种重要的方式,还有环境变量参数化(EnvironmentVariableParameters)、随机数参数化(RandomNumberParameters)等。对于这样一个测试脚本,仅能检查特定的航班订票记录的正确性,如果希望测试脚本对多个航班订票记录的正确性都能检查,则需要进行必要的参数化。第七十六页,共89页。12.3
QTP测试脚本开发(2)参数化测试步骤首先,把测试步骤中的输入数据进行参数化,例如航班日期、航班始点和终点等信息。下面,以“输入终点”的测试步骤的参数化过程为例,介绍如何在关键字视图中对测试脚本进行参数化。●选择“FlyTo:”所在的测试步骤行,单击“Value”列所在的单元格,如图所示●单击单元格旁边的“<#>”按钮,或按快捷键“CTRL+F11”。●在出现的界面中单击“OK”按钮,在关键字视图中可看到,“Value”值已经被参数化。●这时,在之后的界面中选择菜单“View|DataTable”。
QTP运行时,就会从数据表格中提取数据来对测试过程中的各项输入进行参数化。第七十七页,共89页。12.3
QTP测试脚本开发(3)使用随机数来进行参数化对于“选择航班”这个测试步骤的参数化来说会有所不同,因为航班会跟随所选择的起点和终点而变化,因此,需要做特殊的处理。先通过访问GetItemsCount属性,获取航班列表的行数,然后使用RandomNumber随机选取其中一项,最后,再通过Select方法选择航班。第七十八页,共89页。12.3
QTP测试脚本开发(4)参数化检查点测试脚本的最后一个测试步骤是检查订票记录中的航班终点是否正确,同样需要进行适当的参数化,方法如下。●单击检查点所在测试步骤的“Value”列中的单元格。●单击旁边的按钮。●在出现的界面“Configure
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业园区电梯井道安装项目合同
- 建材厂建设土石方施工协议
- 智慧城市项目延期还款协议
- 海洋工程投标质量保证承诺书
- 教育培训顾问服务合同
- 环卫推广瓦工施工合同范本
- 买卖超市车位协议范本
- 展览展示招投标文件移交
- 环保改造以此合同为准
- 矿山开采总价包干承诺书
- 结肠息肉管理
- 《国际政治经济学大纲》详解课件
- 外研版(三起)五年级上册英语期中试题含听力原文(含答案)
- 高中数学 直线与圆的位置关系(第1课时) 课件
- 江西丹康制药有限公司原料药、口服制剂等生产基地项目环境影响报告书
- 物品放行单(标准模版)
- 医疗质量和医疗安全核心制度培训(3篇)
- 信用修复申请书
- 引水隧洞洞身开挖与支护施工方案
- 旅游商品(ppt)课件
- IQC员工技能矩阵图
评论
0/150
提交评论