QTP脚本编程指导教程.ppt

上传人:牧羊曲112 文档编号:5446212 上传时间:2023-07-07 格式:PPT 页数:33 大小:269KB
返回 下载 相关 举报
QTP脚本编程指导教程.ppt_第1页
第1页 / 共33页
QTP脚本编程指导教程.ppt_第2页
第2页 / 共33页
QTP脚本编程指导教程.ppt_第3页
第3页 / 共33页
QTP脚本编程指导教程.ppt_第4页
第4页 / 共33页
QTP脚本编程指导教程.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《QTP脚本编程指导教程.ppt》由会员分享,可在线阅读,更多相关《QTP脚本编程指导教程.ppt(33页珍藏版)》请在三一办公上搜索。

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

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

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

4、Explorer_Server).Output CheckPoint(Internet Explorer_Server)然后调用:XXX.Set DataTable(“Internet Explorer_Server”,dtGlobalSheet)2.使用GetROProperty,把对象text的属性取出来。ButtonName=Browser(QA Home Page).Page(QA Home Page).WebButton(Submit).GetTOProperty(Name)例如获取文本Web文本框的运行时的值:XXX.GetTOProperty(Value),QTP获得随机数的两个

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

6、esting不同状态家长和老师登陆的班级树情况.xls,Sheet1)For j=2 to Ubound(arrRange)SystemUtil.Run C:Program FilesInternet Exploreriexplore.exe,wait(2)Browser(title:=南通家校网).Page(title:=南通家校网).WebEdit(html id:=passport).Set arrRange(j,2)Browser(title:=南通家校网).Page(title:=南通家校网).WebEdit(html id:=password).Set arrRange(j,3)B

7、rowser(南通家校网).Page(南通家校网).Output CheckPoint(南通家校网)Browser(title:=南通家校网).Page(title:=南通家校网).Webedit(html id:=proof_code).Set Trim(DataTable(验证码,dtGlobalSheet)Browser(title:=南通家校网).Page(title:=南通家校网).WebButton(value:=登录).Click,把下载的记录 写到 EXCEL 保存 Dim xlApp Dim xlBook Dim xlSheet Set xlApp=CreateObject(

8、Excel.Application)创建EXCEL对象 Set xlBook=xlApp.Workbooks.Open(D:OfficialLoginTesting不同状态家长和老师登陆的班级树情况.xls)打开已经存在的EXCEL工件簿文件 xlApp.Visible=True 设置EXCEL对象可见(或不可见)Set xlSheet=xlBook.Worksheets(sheet1)设置活动工作表 xlsRowCount=xlSheet.UsedRange.Rows.Count xlsColumnCount=xlSheet.UsedRange.Columns.Count If(Browse

9、r(南通家校网).Page(南通家校网_2).Image(open).Check(CheckPoint(open)Then xlSheet.Cells(j,7)=P 给单元格(row,col)赋值xlSheet.Cells(j,8)=有班级树 给单元格(row,col)赋值 xlBook.Close(True)关闭工作簿 xlApp.Quit 结束EXCEL对象 Set xlApp=Nothing 释放xlApp对象 Else xlSheet.Cells(j,7)=F 给单元格(row,col)赋值 xlSheet.Cells(j,8)=没有班级树 给单元格(row,col)赋值 xlBook

10、.Close(True)关闭工作簿 xlApp.Quit 结束EXCEL对象 Set xlApp=Nothing 释放xlApp对象 End If Browser(title:=南通家校网).CloseNext,输入:sFileName:Excel文件 sSheetName:表单名称 返回:包含Excel数据的数组Function ReadFile(sFileName,sSheetName)Dim oExcel Dim oSheet Dim oRange Dim arrRange On Error Resume Next 创建Excel应用程序对象 Set oExcel=CreateObjec

11、t(Excel.Application)If err.Number 0 Then MsgBox 未能初始化Excel&vbCrLf&_ 请确保Excel已安装,vbCritical Exit Function End If On Error Goto 0 On Error Resume Next 打开Excel文件 oExcel.Workbooks.Open(sFileName)If err.Number 0 Then MsgBox 未能加载Excel文件&vbCrLf&_ 请确保Excel文件路径正确或格式正确,vbCritical Exit Function End If On Error

12、 Goto 0,获取表格的使用范围 Set oSheet=oExcel.Worksheets(sSheetName).UsedRange 获取从A列到F列,从第1行到第100行的范围i中的所有值(需要根据实际情况修改的)Set oRange=oSheet.Range(A1:C4)把Excel数据转换到数组 arrRange=oRange.Value 关闭工作簿 oExcel.WorkBooks.Item(1).Close 退出Excel oExcel.Quit Set oExcel=Nothing 返回包含Excel数据的数组 ReadFile=arrRangeEnd Function,得到随

13、机的固定长度字符串,Function makeStr(inputlength)If IsNumeric(inputlength)Then For i=1 To inputlength 把希望加入的字符放到数组中 A=Array(a,b,c,d,1,2,&,!,#,$,%,&,*)Randomize x=RandomNumber(0,15)B=A(x)makestr=makestr+B Next 置 返回 值 makeStr=makestr Else msgbox(错误的输入数据:&inputlength&,请输入正确的数值!)End If End FunctionMsgBox makeStr(

14、5),判断字符串是否符合要求,Function ValidateStr(strPattern,strContent)Dim regEx,strTemp Set regEx=New RegExp 建立正则表达式。Dim blnMatche regEx.IgnoreCase=true 设置是否区分字符大小写。regEx.Global=True 设置全局可用性。regEx.Pattern=strPattern 设置模式。blnMatche=regEx.test(strContent)ValidateStr=blnMatche 置 返回值 Set regEx=NothingEnd Function检查

15、日期格式 为 YYYY-MM-DD 的正则表达式 验证 邮箱的是 A=w+(-+.w+)*w+(-.w+)*.w+(-.w+)*A=(19|20)(02468048)|(1357926)-02-29)|(200-90-9)|(190-90-9)-(01-9)|(10-2)-(01-9)|(1d)|(20-8)|(013578)|(102)-31)|(01,3-9)|(10-2)-(29|30)$B=2010-02-023msgbox ValidateStr(A,B),使用本地数据源连接Oracle数据库1,使用数据源连接oracle数据库Dim StrCon Dim Res,Cmd Set R

16、es=CreateObject(ADODB.Recordset)Set Cmd=CreateObject(ADODB.Command)以下为建立连接 StrCon=Provider=MSDASQL.1;Password=xuexi6;Persist Security Info=True;User ID=community_xuexi6;Data Source=AURORA;Mode=Read;Cmd.activeconnection=StrCon Cmd.CommandType=1 以下为执行sql,根据实际情况替换之 Cmd.CommandText=select count(*)from s

17、paces Set Res=Cmd.Execute()展示结果 Do while not Res.eof Msgbox(Res(0)Res.MoveNext Loop 以下为关闭数据库连接 Set Res=nothing Set Cmd.activeconnection=nothing Set Cmd=nothing,不使用本地数据源连接Oracle数据库2,Dim StrCon Dim Res,Cmd Set Res=CreateObject(ADODB.Recordset)Set Cmd=CreateObject(ADODB.Command)以下为建立连接 StrCon=Driver=Mi

18、crosoft ODBC for Oracle;Server=AURORA;Uid=community_xuexi6;Pwd=xuexi6;Cmd.activeconnection=StrCon Cmd.CommandType=1 以下为执行sql,根据实际情况替换之 Cmd.CommandText=select count(*)from spaces Set Res=Cmd.Execute()展示结果 Do while not Res.eof Msgbox(Res(0)Res.MoveNext Loop 以下为关闭数据库连接 Set Res=nothing Set Cmd.activecon

19、nection=nothing Set Cmd=nothing,QTP 为描述性编程自动创建注释,当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等.用action template 来实现最简单快捷。方法:用记事本等文本编辑器,输入如下类似的内容:Company:Author:Ailan Chen Product:Function:Date:Date然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。,检查被测页面中对象是否存在,在手工编写脚本时,常常需要检查一下页面中某个个需要测试的对象是否存在,如果对象存在,用例被正常执

20、行;否则应设置提示或报错退出或者报告测试结果。检查文本框对象是否存在(通过查源文件找出该对象的name值)If Browser(“title:=南通家校网).Page(title:=南通家校网).WebEdit(html id:=passport“).Exist Then MsgBox(“用户名输入框存在)Else MsgBox(“用户名输入框不存在)End if,QTP中调用共享文件2个方法,1.利用ExecuteFile函数来调用.vbs文件 ExecuteFile(“F:test.vbs”)直接调用执行.vbs文件 2.利用QTP本地共享资源文件(可以调用*.sql;*.vbs;*.tx

21、t 三种后缀文件)Dim order order=1 writeorderno orderFunction writeorderno(orderno)Dim fso,myfile Set fso=CreateObject(scripting.FileSystemObject)Set myfile=fso.openTextFile(D:qtp resourcesresult.txt,8,false)myfile.writeline orderno myfile.close End Function,QTP的几种同步等待方法,设置对象的默认等待时间。QTP识别对象时,会有一个默认的等待时间,可以在

22、File-Settings-Run-Object synchronization中设置,默认时间是20秒 2.使用.Sync方法,等待百度这个页面完全打开,才继续执行下面操作 Browser(“Browser”).Navigate Browser(Browser).Page(百度).Sync3.Wait 等待固定秒数4.同步点 QTP脚本在执行过程中如果遇到同步点,则会暂停脚本的执行,直到对象的属性获取到了预先设定的值,才开始执行下一条脚本,后面单位是毫秒例如:Browser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).WaitProperty visible

23、,True,1000005编程实现 Do until Browser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).Exist()Wait(1)Loop,QTP检查链接对象的2个方法,1.使用 CheckProperty 方法 Browser(Welcome:Mercury Tours).Page(Welcome:Mercury Tours).Link(REGISTER).CheckProperty(url,)2.比较Link对象的Object属性中的href属性 href=Browser(Welcome:Mercury Tours).Page(Welcome:

24、Mercury Tours).Link(REGISTER).Object.href 如果地址不正确,则报告错误 If NOT href=http:/Then Reporter.ReportEvent micFail,Link Error,href ExitAction End If,自动化测试获取和删除cookies的方法,1.Set document=browser(“taobao”).page(“taobao”).object a=document.cookie document.cookie=”userId=828;expire=”+date.toGMTString();2.qtp中的W

25、ebUtilA=WebUtil.GetCookies(url)获取cookieWebUtil.DeleteCookie(domain,cookies)删除cookieWebutil.DeleteCookies3.原始方法 录制IE清楚Cookies的步骤,单选框的几个方法,1.获取当前选择单选框的index 值 a.Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(selected item index)b.Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).Get

26、ROProperty(value)2.获取单选框的长度(就是有几个选择项)Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(items count)3.获取单选框的所有值Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(all items“)4.设置单选框的选择Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).Select 2,复选框的2个方法,1.设置复选框选中 Browser(百度

27、一下,你就知道).Page(百度个人中心登录).WebCheckBox(mem_pass).Set ON“2.选中某个页面上的所有复选框 Set MyDescription=Description.Create()MyDescription(html tag).Value=INPUT MyDescription(type).Value=checkboxSet Checkboxes=Browser(“title:=学习乐教育社区”).Page(“title:=学习乐 教育社区).ChildObjects(MyDescription)NumOfChildObjs=Checkboxes.CountF

28、or Counter=0 to NumOfChildObjs-1 Checkboxes(Counter).Set ONNext,脚本回放出错跳过代码,在回放脚本的时候,有时因为错误导致运行的脚本中断,不能自动运行。On error resume next 遇到错误返回到脚本的下一行继续执行。On error goto 0 错误处理的控制权,平时是由QTP控制的(这个叫默认的),当有on error resume next 时,是交给on error处理,当on error goto 0 时,就换给QTP,Datetable简单操作方法,QTP自动生成的写法,其中,dtLocalSheet就是当

29、前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名DataTable(Col,dtLocalSheet)DataTable(Col,dtGlobalSheet)读取Action2的Col列。DataTable(Col,Action2)读取Action2的第一列,不管第一列叫什么名字,都能读DataTable(1,Action2)循环读取Action2的110列For i=1 To 10 MsgBox DataTable(i,Action2)Next表也可以用数字代替,读取第二个Action表的第一列DataTable(1,2)使用D

30、ateTable的一个好处是可以跨Action使用数据,不过在一个Action里读取另外一个Action的列时要注意另外一个Action的当前行比如你在Action1里读取Action2的某列,如果Action1运行到第二行,你读取的Action2还是第一行的数据,解决办法就是写上这句:DataTable.GetSheet(Action2).SetCurrentRow(2)你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:CurrRow=DataTable.GetSheet(Action1).GetCurrent

31、RowDataTable.GetSheet(Action2).SetCurrentRow(CurrRow),Datetable操作方法进阶,假设现在有一个Excel文件:D:data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder;前QTP的Test中有两个Action:LoginAction和InsertAction。当然该Test中对应的DataTable应该有三个:Global、LoginAction和InsertAction;面就详细的说一下DataTable是如何操作这些数据的:DataTable.Import D:data.xls

32、将data.xls中第一个叫Login表单内容导入到Test的Global表单中,将InsertOrder表单的内容导入到Test的LoginAction表单中,依次类推;这个方法比较适合只导入Excel中第一个表单的内容DataTable.ImportSheet D:data.xls,Login,LoginAction 将data.xls文件中的Login表单内容导入到当前Test的LoginAction表单中DataTable.GetSheet(Global).SetNextRow 设置下一行,红色表示要操作的表单名字columnCount=DataTable.GetSheet(Globa

33、l).GetParametercount 取得Global表单中的总列数DataTable.GetSheet(Global).DeleteParameter(列名)运行时向Global表单中删除列DataTable.GetSheet(Global).SetPrevRow 设置上一行cellValue=DataTable.GetSheet(Global).GetParameter(列名)取得Global表单中某列的值,可以这样写:DataTable.Value(列名,表单名字),我喜欢这种写法rowCount=DataTable.GetSheet(Global).GetRowCount 取得Gl

34、obal表单中的总行数DataTable.GetSheet(Global).SetCurrentRow(3)设置当前行为第3行DataTable.Value(列名,表单名字)=twf 运行时设置某列值,例如DataTable.Value(username,LoginAction)=twfDataTable.Export D:result.xls 将当前Test的所有表单(LoginAction和InsertOrderAction、Global)中的所有内容全部导出到result.xls中DataTable.ExportSheet D:result.xls,LoginAction 将当前Test

35、的LoginAction表单中的内容导出到D:result.xls文件中,关于时间的2个方法,1.获得当前时间 Dim currentTime currentTime=Time2.计算2时间差 datediff Function TimeSpace()datediff(d,起始日期,结束日期),其中d代表以天为单位,M以月为单位,H代表小时;now代表当前日期 a=datediff(H,now,2008-8-8)MsgBox(a)End Function,IE窗口的几个方法,1.打开 SystemUtil.Run“iexplore.exe”,2.关闭 SystemUtil.CloseProce

36、ssByName(“iexplore.exe”)3.重新导航 Browser(百度一下,你就知道).Navigate http:/Browser(百度一下,你就知道).Refresh5.额外说一个SystemUtil 方法,屏蔽鼠标键盘操作的方法 SystemUtil.BlockInput SystemUtil.UnblockInput,QTP访问DOM,1.QTP支持直接访问DOM(Document Object Model),可以通过DOM来访问HTML标签 On Error Resume Next Set Doc=Browser(Google).Page(Google).Object 循

37、环获取Page中的所有对象For Each Element In Doc.all TagName=Element.TagName 获取标签名 InnerText=Element.innerText 获取inner text.把信息写入测试结果 Reporter.ReportEvent 0,TagName,InnerText Next,Dictionary Object使用,1.在QTP中,可以把Dictionary 当成数组来用,而且可以随时添加数据,而不需要预先定义大小Set Dic=CreateObject(Scripting.Dictionary)创建Dictionary对象For It

38、erator=1 To 3 Step 1 添加Dictionary的key和value Dic.Add CStr(Iterator),Iterator&_ValueNextFor Iterator=1 To Dic.Count Step 1 循环读取Dictionary的key和value Msgbox Dic.Item(CStr(Iterator)NextDicArray=Dic.ItemsFor I=0 To Dic.CountFor I=0 To UBound(DicArray)Msgbox DicArray(I)NextIf Dic.Exists(2)Then 判断是否存在某个Key,

39、如果存在,则把其去掉 Msgbox Dic.Item(2)Dic.Remove(2)End IfMsgbox Dic.Count 清空所有 Key和ValueDic.RemoveAll()Msgbox Dic.Count,测试输入框输入的最大允许字数1,Function checkMaxinput(myObject,maxSize)myObject.Clickwait(1)Setting.WebPackage(“passport”)=2 配置使用浏览器事件或鼠标运行鼠标操作的式 1-使用浏览器事件运行鼠标操作,2-使用鼠标运行鼠标操作。Set obj=createobject(wscript.

40、shell)i=0old=axin=bwhile oldxin old=myObject.GetROProperty(value)i=i+1 obj.sendkeys“1“WshShell.SendKeys ENTER 模拟键盘进行操作 xin=myObject.GetROProperty(value)wendIf i-1=maxSize ThencheckMaxinput=trueelse checkMaxinput=falseEnd If Setting.WebPackage(passport)=1End Function,测试输入框输入的最大允许字数2,Set tempObject=Br

41、owser(学习乐教育社区).Page(学习乐教育社区).WebEdit(passport)If checkMaxinput(tempObject,20)eqv true Then reporter.ReportEvent 0,学习乐注册,用户名输入框允许输入的最大字符功能正确,PASSElse reporter.ReportEvent 1,学习乐注册,用户名输入框允许输入的最大字符功能错误,FAILEnd if,添加附件,还没找到 好方法,其他,调试脚本1.脚本编写完毕,可以用按ctrl+f7来查看脚本是否有语法错误。,寄语,路还很长Thanks,祝大家新年快乐!Ailan Chen 江苏北极光科技有限公司,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号