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

下载本文档

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

文档简介

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

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

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

4、ternet Explorer).WinObject(Internet 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文本框的运行时

5、的值:XXX.GetTOProperty(Value) 5QTP获得随机数的两个方法获得随机数的两个方法1.qtp 提供的一个获取随机数的函数取得 1 到 100 之间的一个数x = RandomNumber(0,100)Msgbox x 2.使用 Randomize 函数来产生随机数,Randomize 用于初始化 Rnd 函数的随机数产生器。Dim MyValue 初始化随机数产生器RandomizeMyValue = Int(10*Rnd+0)6QTP读写本地读写本地Excel文件文件Company: http:/ chenhuaProduct: 家校网Function:不同状态的家长和

6、老师登陆查看是否有班级树Date: 2010-01-29 arrRange = ReadFile(D:OfficialLoginTesting不同状态家长和老师登陆的班级树情况.xls,Sheet1)For j = 2 to Ubound(arrRange) SystemUtil.Run C:Program FilesInternet Exploreriexplore.exe,http:/ wait(2) Browser(title:=南通家校网).Page(title:=南通家校网).WebEdit(html id:=passport).Set arrRange(j,2) Browser(t

7、itle:=南通家校网).Page(title:=南通家校网).WebEdit(html id:=password).Set arrRange(j,3) Browser(南通家校网).Page(南通家校网).Output CheckPoint(南通家校网) Browser(title:=南通家校网).Page(title:=南通家校网).Webedit(html id:=proof_code).Set Trim(DataTable(验证码, dtGlobalSheet) Browser(title:=南通家校网).Page(title:=南通家校网).WebButton(value:=登录).

8、Click 7把下载的记录 写到 EXCEL 保存 Dim xlApp Dim xlBook Dim xlSheet Set xlApp = CreateObject(Excel.Application) 创建EXCEL对象 Set xlBook = xlApp.Workbooks.Open(D:OfficialLoginTesting不同状态家长和老师登陆的班级树情况.xls) 打开已经存在的EXCEL工件簿文件 xlApp.Visible = True 设置EXCEL对象可见(或不可见) Set xlSheet = xlBook.Worksheets(sheet1) 设置活动工作表 xls

9、RowCount = xlSheet.UsedRange.Rows.Count xlsColumnCount = xlSheet.UsedRange.Columns.Count If(Browser(南通家校网).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 xlAp

10、p = Nothing 释放xlApp对象 Else xlSheet.Cells(j, 7) =F 给单元格(row,col)赋值 xlSheet.Cells(j, 8) = 没有班级树 给单元格(row,col)赋值 xlBook.Close (True) 关闭工作簿 xlApp.Quit 结束EXCEL对象 Set xlApp = Nothing 释放xlApp对象 End If Browser(title:=南通家校网).CloseNext8 输入: sFileName: Excel文件 sSheetName:表单名称 返回: 包含Excel数据的数组Function ReadFile(

11、sFileName,sSheetName) Dim oExcel Dim oSheet Dim oRange Dim arrRange On Error Resume Next 创建Excel应用程序对象 Set oExcel = CreateObject(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文件

12、oExcel.Workbooks.Open(sFileName) If err.Number 0 Then MsgBox 未能加载Excel文件 & vbCrLf & _ 请确保Excel文件路径正确或格式正确, vbCritical Exit Function End If On Error Goto 0 9 获取表格的使用范围 Set oSheet = oExcel.Worksheets(sSheetName).UsedRange 获取从A列到F列,从第1行到第100行的范围i中的所有值 (需要根据实际情况修改的) Set oRange = oSheet.Range(A1:

13、C4) 把Excel数据转换到数组 arrRange = oRange.Value 关闭工作簿 oExcel.WorkBooks.Item(1).Close 退出Excel oExcel.Quit Set oExcel = Nothing 返回包含Excel数据的数组 ReadFile = arrRangeEnd Function10得到随机的固定长度字符串得到随机的固定长度字符串Function makeStr( inputlength) If IsNumeric(inputlength) Then For i = 1 To inputlength 把希望加入的字符放到数组中 A = Arr

14、ay(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(5)11判断字符串是否符合要求判断字符串是否符合要求Function ValidateStr(strPattern,strContent) Dim regEx, strT

15、emp 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检查日期格式 为 YYYY-MM-DD 的正则表达式 验证 邮箱的是 A =w+(-+.w+)*w+(-.w+

16、)*.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)12使用本地数据源连接使用本地数据源连接Oracle数据库数据库1使用数据源连接oracle数据库Dim StrCon Dim Res,Cmd Set Res = CreateObject(ADODB.Recordset)

17、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 spaces Set Res = Cmd.Exec

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

19、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.a

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

21、否存在 在手工编写脚本时,常常需要检查一下页面中某个个需要测试的对象是否存在,如果对象存在,用例被正常执行;否则应设置提示或报错退出或者报告测试结果。 检查文本框对象是否存在(通过查源文件找出该对象的name值) If Browser(“title:=南通家校网).Page( title:=南通家校网).WebEdit(html id:=passport“).Exist Then MsgBox(“用户名输入框存在) Else MsgBox(“用户名输入框不存在) End if16QTP中调用共享文件中调用共享文件2个方法个方法1.利用ExecuteFile函数来调用.vbs文件 Execute

22、File(“F:test.vbs”) 直接调用执行 .vbs文件 2.利用QTP本地共享资源文件(可以调用 *.sql;*.vbs;*.txt 三种后缀文件)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 m

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

24、的值,才开始执行下一条脚本,后面单位是毫秒例如:Browser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).WaitProperty visible, True, 1000005编程实现 Do until Browser(百度一下,你就知道).Page(百度一下,你就知道).WebEdit(wd).Exist() Wait(1) Loop 18QTP检查链接对象的检查链接对象的2个方法个方法 1.使用 CheckProperty 方法 Browser(Welcome: Mercury Tours).Page(Welcome: Mercury Tours).Li

25、nk(REGISTER).CheckProperty (url,http:/ href = Browser(Welcome: Mercury Tours).Page(Welcome: Mercury Tours).Link(REGISTER).Object.href 如果地址不正确,则报告错误 If NOT href =http:/ Then Reporter.ReportEvent micFail,Link Error,href ExitAction End If19自动化测试获取和删除自动化测试获取和删除cookies的方法的方法1. Set document=browser(“taoba

26、o”).page(“taobao”).object a= document.cookie document.cookie=”userId=828; expire=”+date.toGMTString();2. qtp中的WebUtilA= WebUtil.GetCookies(url) 获取cookieWebUtil.DeleteCookie(domain,cookies) 删除cookieWebutil.DeleteCookies3.原始方法 录制IE清楚Cookies的步骤20单选框的几个方法单选框的几个方法1.获取当前选择单选框的index 值 a. Browser(百度一下,你就知道)

27、.Page(百度用户注册).WebRadioGroup(sex).GetROProperty(selected item index) b. Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(value)2.获取单选框的长度(就是有几个选择项)Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).GetROProperty(items count)3.获取单选框的所有值Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex)

28、.GetROProperty(all items“)4.设置单选框的选择Browser(百度一下,你就知道).Page(百度用户注册).WebRadioGroup(sex).Select 221复选框的复选框的2个方法个方法1.设置复选框选中 Browser(百度一下,你就知道).Page(百度个人中心登录).WebCheckBox(mem_pass).Set ON“2.选中某个页面上的所有复选框 Set MyDescription = Description.Create() MyDescription(html tag).Value = INPUT MyDescription(type).

29、Value = checkbox Set Checkboxes =Browser(“title:=学习乐教育社区”).Page(“title:=学习乐 教育社区).ChildObjects(MyDescription) NumOfChildObjs = Checkboxes.Count For Counter=0 to NumOfChildObjs-1 Checkboxes(Counter).Set ON Next22脚本回放出错跳过代码脚本回放出错跳过代码在回放脚本的时候,有时因为错误导致运行的脚本中断,不能自动运行。On error resume next 遇到错误返回到脚本的下一行继续执

30、行。 On error goto 0 错误处理的控制权,平时是由QTP控制的(这个叫默认的),当有on error resume next 时,是交给on error处理,当on error goto 0 时,就换给QTP 23Datetable简单操作方法简单操作方法QTP自动生成的写法,其中,dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名DataTable(Col, dtLocalSheet)DataTable(Col, dtGlobalSheet)读取Action2的Col列。DataTabl

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

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

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

34、le.ImportSheet D: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.GetShe

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

36、aTable.Value (username, LoginAction)=twfDataTable.Export D:result.xls 将当前Test的所有表单(LoginAction和InsertOrderAction、Global)中的所有内容全部导出到result.xls中DataTable.ExportSheet D:result.xls,LoginAction 将当前Test的LoginAction表单中的内容导出到D:result.xls文件中25关于时间的关于时间的2个方法个方法 1.获得当前时间 Dim currentTime currentTime = Time 2.计算

37、2时间差 datediff Function TimeSpace() datediff(d,起始日期,结束日期),其中d代表以天为单位,M以月为单位,H代表小时;now代表当前日期 a=datediff(H,now,2008-8-8) MsgBox(a) End Function26IE窗口的几个方法窗口的几个方法1.打开 SystemUtil.Run “iexplore.exe” , http:/ 关闭 SystemUtil.CloseProcessByName(“iexplore.exe”)3.重新导航 Browser(百度一下,你就知道).Navigate http:/ Browser(

38、百度一下,你就知道).Refresh5.额外说一个SystemUtil 方法,屏蔽鼠标键盘操作的方法 SystemUtil.BlockInput SystemUtil.UnblockInput 27QTP访问访问DOM1. QTP支持直接访问DOM(Document Object Model),可以通过DOM来访问HTML标签 On Error Resume Next Set Doc = Browser(Google).Page(Google).Object 循环获取Page中的所有对象For Each Element In Doc.all TagName = Element.TagName 获取标签名 InnerText = Element.innerText 获取inner text. 把信息写入测试结果 Reporter.ReportEvent 0, TagName, InnerText Next 28Dictionary Object使用使用 1.在QTP中,可以把Dictionary 当成数组来用,而且可以随时添加数据,而不需要预先定义大小Set Dic = CreateObject(Scripting.Dictionary) 创建Dic

温馨提示

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

评论

0/150

提交评论