QTP脚本编程指导教程ppt课件_第1页
QTP脚本编程指导教程ppt课件_第2页
QTP脚本编程指导教程ppt课件_第3页
QTP脚本编程指导教程ppt课件_第4页
QTP脚本编程指导教程ppt课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、QTP脚本编写,1,QTP识别对象原理,QTP里的对象有两个概念,一个是TestObject(简称TO),一个是RuntimeObject(简称RO)TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象QTP识别对象,一般是要求先在对象仓库文件里定义仓库对象,里面存有实际对象的特征属性的值。然后在运行的时候,QTP会根据脚本里的对象名字,在对象仓库里找到对应的仓库对象,接着根据仓库对象的特征属性描述,在被测试软件里搜索找到相匹配的实际对象,最后就可以对实际对象进行操作了。仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在录制编写时进行修改,也可以在运行过程中进行动态修改,以

2、匹配实际对象。和TO、RO相关的几个函数有:GetTOProperty():取得仓库对象的某个属性的值GetTOProperties():取得仓库对象的所有属性的值SetTOProperty():设置仓库对象的某个属性的值GetROProperty():取得实际对象的某个属性的值,2,QTP操作对象的原理,QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。两种接口的脚本书写格式的差别在于:自身

3、接口需要在对象名后面加object再加属性名或方法名,封装接口就不用在对象名后面加object。具体格式如下:对实际对象的操作:对象.object.自身属性对象.object.自身方法()对象.GetROProperty(封装属性)对象.封装方法()对仓库对象的操作:对象.GetTOProperty(封装属性)对象.GetTOProperties()获取所有封装属性的值对象.SetTOProperty(封装属性,封装属性值),3,QTP获取文本框里的值的两个方法,1.使用用QTP自带的out值Window(WindowsInternetExplorer).WinObject(InternetE

4、xplorer_Server).OutputCheckPoint(InternetExplorer_Server)然后调用:XXX.SetDataTable(“InternetExplorer_Server”,dtGlobalSheet)2.使用GetROProperty,把对象text的属性取出来。ButtonName=Browser(QAHomePage).Page(QAHomePage).WebButton(Submit).GetTOProperty(Name)例如获取文本Web文本框的运行时的值:XXX.GetTOProperty(Value),4,QTP获得随机数的两个方法,1.qt

5、p提供的一个获取随机数的函数取得1到100之间的一个数x=RandomNumber(0,100)Msgboxx2.使用Randomize函数来产生随机数,Randomize用于初始化Rnd函数的随机数产生器。DimMyValue初始化随机数产生器RandomizeMyValue=Int(10*Rnd+0),5,QTP读写本地Excel文件,Company:Product:家校网Function:不同状态的家长和老师登陆查看是否有班级树Date:2010-01-29arrRange=ReadFile(D:OfficialLoginTesting不同状态家长和老师登陆的班级树情况.xls,Shee

6、t1)Forj=2toUbound(arrRange)SystemUtil.RunC:ProgramFilesInternetExploreriexplore.exe,wait(2)Browser(title:=南通家校网).Page(title:=南通家校网).WebEdit(htmlid:=passport).SetarrRange(j,2)Browser(title:=南通家校网).Page(title:=南通家校网).WebEdit(htmlid:=password).SetarrRange(j,3)Browser(南通家校网).Page(南通家校网).OutputCheckPoint

7、(南通家校网)Browser(title:=南通家校网).Page(title:=南通家校网).Webedit(htmlid:=proof_code).SetTrim(DataTable(验证码,dtGlobalSheet)Browser(title:=南通家校网).Page(title:=南通家校网).WebButton(value:=登录).Click,6,把下载的记录写到EXCEL保存DimxlAppDimxlBookDimxlSheetSetxlApp=CreateObject(Excel.Application)创建EXCEL对象SetxlBook=xlApp.Workbooks.O

8、pen(D:OfficialLoginTesting不同状态家长和老师登陆的班级树情况.xls)打开已经存在的EXCEL工件簿文件xlApp.Visible=True设置EXCEL对象可见(或不可见)SetxlSheet=xlBook.Worksheets(sheet1)设置活动工作表xlsRowCount=xlSheet.UsedRange.Rows.CountxlsColumnCount=xlSheet.UsedRange.Columns.CountIf(Browser(南通家校网).Page(南通家校网_2).Image(open).Check(CheckPoint(open)Thenx

9、lSheet.Cells(j,7)=P给单元格(row,col)赋值xlSheet.Cells(j,8)=有班级树给单元格(row,col)赋值xlBook.Close(True)关闭工作簿xlApp.Quit结束EXCEL对象SetxlApp=Nothing释放xlApp对象ElsexlSheet.Cells(j,7)=F给单元格(row,col)赋值xlSheet.Cells(j,8)=没有班级树给单元格(row,col)赋值xlBook.Close(True)关闭工作簿xlApp.Quit结束EXCEL对象SetxlApp=Nothing释放xlApp对象EndIfBrowser(tit

10、le:=南通家校网).CloseNext,7,输入:sFileName:Excel文件sSheetName:表单名称返回:包含Excel数据的数组FunctionReadFile(sFileName,sSheetName)DimoExcelDimoSheetDimoRangeDimarrRangeOnErrorResumeNext创建Excel应用程序对象SetoExcel=CreateObject(Excel.Application)Iferr.Number0ThenMsgBox未能初始化ExcelPassword=xuexi6;PersistSecurityInfo=True;UserID

11、=community_xuexi6;DataSource=AURORA;Mode=Read;Cmd.activeconnection=StrConCmd.CommandType=1以下为执行sql,根据实际情况替换之Cmd.CommandText=selectcount(*)fromspacesSetRes=Cmd.Execute()展示结果DowhilenotRes.eofMsgbox(Res(0)Res.MoveNextLoop以下为关闭数据库连接SetRes=nothingSetCmd.activeconnection=nothingSetCmd=nothing,12,不使用本地数据源连

12、接Oracle数据库2,DimStrConDimRes,CmdSetRes=CreateObject(ADODB.Recordset)SetCmd=CreateObject(ADODB.Command)以下为建立连接StrCon=Driver=MicrosoftODBCforOracle;Server=AURORA;Uid=community_xuexi6;Pwd=xuexi6;Cmd.activeconnection=StrConCmd.CommandType=1以下为执行sql,根据实际情况替换之Cmd.CommandText=selectcount(*)fromspacesSetRes=

13、Cmd.Execute()展示结果DowhilenotRes.eofMsgbox(Res(0)Res.MoveNextLoop以下为关闭数据库连接SetRes=nothingSetCmd.activeconnection=nothingSetCmd=nothing,13,QTP为描述性编程自动创建注释,当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等.用actiontemplate来实现最简单快捷。方法:用记事本等文本编辑器,输入如下类似的内容:Company:Author:AilanChenProduct:Function:Date:Date然后将文件保存为Ac

14、tionTemplate.mst,并存放到QTP安装目录下的dat目录。,14,检查被测页面中对象是否存在,在手工编写脚本时,常常需要检查一下页面中某个个需要测试的对象是否存在,如果对象存在,用例被正常执行;否则应设置提示或报错退出或者报告测试结果。检查文本框对象是否存在(通过查源文件找出该对象的name值)IfBrowser(“title:=南通家校网).Page(title:=南通家校网).WebEdit(htmlid:=passport“).ExistThenMsgBox(“用户名输入框存在)ElseMsgBox(“用户名输入框不存在)Endif,15,QTP中调用共享文件2个方法,1.

15、利用ExecuteFile函数来调用.vbs文件ExecuteFile(“F:test.vbs”)直接调用执行.vbs文件2.利用QTP本地共享资源文件(可以调用*.sql;*.vbs;*.txt三种后缀文件)Dimorderorder=1writeordernoorderFunctionwriteorderno(orderno)Dimfso,myfileSetfso=CreateObject(scripting.FileSystemObject)Setmyfile=fso.openTextFile(D:qtpresourcesresult.txt,8,false)myfile.writeli

16、neordernomyfile.closeEndFunction,16,QTP的几种同步等待方法,设置对象的默认等待时间。QTP识别对象时,会有一个默认的等待时间,可以在File-Settings-Run-Objectsynchronization中设置,默认时间是20秒2.使用.Sync方法,等待百度这个页面完全打开,才继续执行下面操作Browser(“Browser”).NavigateBrowser(Browser).Page(百度).Sync3.Wait等待固定秒数4.同步点QTP脚本在执行过程中如果遇到同步点,则会暂停脚本的执行,直到对象的属性获取到了预先设定的值,才开始执行下一条脚

17、本,后面单位是毫秒例如:Browser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).WaitPropertyvisible,True,1000005编程实现DountilBrowser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).Exist()Wait(1)Loop,17,QTP检查链接对象的2个方法,1.使用CheckProperty方法Browser(Welcome:MercuryTours).Page(Welcome:MercuryTours).Link(REGISTER).CheckProperty(url,Repor

18、ter.ReportEventmicFail,LinkError,hrefExitActionEndIf,18,自动化测试获取和删除cookies的方法,1.Setdocument=browser(“taobao”).page(“taobao”).objecta=document.cookiedocument.cookie=”userId=828;expire=”+date.toGMTString();2.qtp中的WebUtilA=WebUtil.GetCookies(url)获取cookieWebUtil.DeleteCookie(domain,cookies)删除cookieWebuti

19、l.DeleteCookies3.原始方法录制IE清楚Cookies的步骤,19,单选框的几个方法,1.获取当前选择单选框的index值a.Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(selecteditemindex)b.Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(value)2.获取单选框的长度(就是有几个选择项)Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).Get

20、ROProperty(itemscount)3.获取单选框的所有值Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(allitems“)4.设置单选框的选择Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).Select2,20,复选框的2个方法,1.设置复选框选中Browser(百度一下,你就知道).Page(百度个人中心登录).WebCheckBox(mem_pass).SetON“2.选中某个页面上的所有复选框SetMyDescription=Descript

21、ion.Create()MyDescription(htmltag).Value=INPUTMyDescription(type).Value=checkboxSetCheckboxes=Browser(“title:=学习乐教育社区”).Page(“title:=学习乐教育社区).ChildObjects(MyDescription)NumOfChildObjs=Checkboxes.CountForCounter=0toNumOfChildObjs-1Checkboxes(Counter).SetONNext,21,脚本回放出错跳过代码,在回放脚本的时候,有时因为错误导致运行的脚本中断,不

22、能自动运行。Onerrorresumenext遇到错误返回到脚本的下一行继续执行。Onerrorgoto0错误处理的控制权,平时是由QTP控制的(这个叫默认的),当有onerrorresumenext时,是交给onerror处理,当onerrorgoto0时,就换给QTP,22,Datetable简单操作方法,QTP自动生成的写法,其中,dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名DataTable(Col,dtLocalSheet)DataTable(Col,dtGlobalSheet)读取Ac

23、tion2的Col列。DataTable(Col,Action2)读取Action2的第一列,不管第一列叫什么名字,都能读DataTable(1,Action2)循环读取Action2的110列Fori=1To10MsgBoxDataTable(i,Action2)Next表也可以用数字代替,读取第二个Action表的第一列DataTable(1,2)使用DateTable的一个好处是可以跨Action使用数据,不过在一个Action里读取另外一个Action的列时要注意另外一个Action的当前行比如你在Action1里读取Action2的某列,如果Action1运行到第二行,你读取的Act

24、ion2还是第一行的数据,解决办法就是写上这句:DataTable.GetSheet(Action2).SetCurrentRow(2)你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:CurrRow=DataTable.GetSheet(Action1).GetCurrentRowDataTable.GetSheet(Action2).SetCurrentRow(CurrRow),23,Datetable操作方法进阶,假设现在有一个Excel文件:D:data.xls,里面的具体内容如下:有两个Sheet,第一

25、个叫Login,第二个叫InsertOrder;前QTP的Test中有两个Action:LoginAction和InsertAction。当然该Test中对应的DataTable应该有三个:Global、LoginAction和InsertAction;面就详细的说一下DataTable是如何操作这些数据的:DataTable.ImportD:data.xls将data.xls中第一个叫Login表单内容导入到Test的Global表单中,将InsertOrder表单的内容导入到Test的LoginAction表单中,依次类推;这个方法比较适合只导入Excel中第一个表单的内容DataTabl

26、e.ImportSheetD:data.xls,Login,LoginAction将data.xls文件中的Login表单内容导入到当前Test的LoginAction表单中DataTable.GetSheet(Global).SetNextRow设置下一行,红色表示要操作的表单名字columnCount=DataTable.GetSheet(Global).GetParametercount取得Global表单中的总列数DataTable.GetSheet(Global).DeleteParameter(列名)运行时向Global表单中删除列DataTable.GetSheet(Global

27、).SetPrevRow设置上一行cellValue=DataTable.GetSheet(Global).GetParameter(列名)取得Global表单中某列的值,可以这样写:DataTable.Value(列名,表单名字),我喜欢这种写法rowCount=DataTable.GetSheet(Global).GetRowCount取得Global表单中的总行数DataTable.GetSheet(Global).SetCurrentRow(3)设置当前行为第3行DataTable.Value(列名,表单名字)=twf运行时设置某列值,例如DataTable.Value(usernam

28、e,LoginAction)=twfDataTable.ExportD:result.xls将当前Test的所有表单(LoginAction和InsertOrderAction、Global)中的所有内容全部导出到result.xls中DataTable.ExportSheetD:result.xls,LoginAction将当前Test的LoginAction表单中的内容导出到D:result.xls文件中,24,关于时间的2个方法,1.获得当前时间DimcurrentTimecurrentTime=Time2.计算2时间差datediffFunctionTimeSpace()datedif

29、f(d,起始日期,结束日期),其中d代表以天为单位,M以月为单位,H代表小时;now代表当前日期a=datediff(H,now,2008-8-8)MsgBox(a)EndFunction,25,IE窗口的几个方法,1.打开SystemUtil.Run“iexplore.exe”,26,QTP访问DOM,1.QTP支持直接访问DOM(DocumentObjectModel),可以通过DOM来访问HTML标签OnErrorResumeNextSetDoc=Browser(Google).Page(Google).Object循环获取Page中的所有对象ForEachElementInDoc.al

30、lTagName=Element.TagName获取标签名InnerText=Element.innerText获取innertext.把信息写入测试结果Reporter.ReportEvent0,TagName,InnerTextNext,27,DictionaryObject使用,1.在QTP中,可以把Dictionary当成数组来用,而且可以随时添加数据,而不需要预先定义大小SetDic=CreateObject(Scripting.Dictionary)创建Dictionary对象ForIterator=1To3Step1添加Dictionary的key和valueDic.AddCStr(Iterator),Iterator&_ValueNextForIterator=1ToDic.CountStep1循环读取Dictionary的key和valueMsgboxDic.Item(CStr(Iter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论