QTP自动化测试工具笔记.docx
《QTP自动化测试工具笔记.docx》由会员分享,可在线阅读,更多相关《QTP自动化测试工具笔记.docx(22页珍藏版)》请在冰豆网上搜索。
QTP自动化测试工具笔记
PPT1recording
一、QTP简介
1、QuickTestProfessional
2、关键字驱动功能自动化测试工具
3、QTP的视图:
关键字视图(keywordview)--关键字
专家视图(Expertview)--VBScript
二、录制
设置录制的位置:
Automation--RecordandRunSettings
WindowApplication:
手动启动:
录制桌面上已经存在的被测程序
特征:
1、systemutil.Run
2、补录
自动启动:
录制由QTP打开的指定测试程序\录制由Window启动的指定被测程序
Web:
手动启动:
录制桌面上已经存在的浏览器
注意:
1、将浏览器放到快速启动栏
2、将被测网站设置为首页(浏览器--工具--Internet选项)
3、补录
自动启动:
录制指定网站的被测浏览器
三、QTP的录制回放原理(****)
录制原理:
1、获取被操作对象的属性信息
2、使用唯一的对象名(逻辑名)将对象记录在对象仓库中
3、将对象的全部属性信息记录在对象仓库中
4、标识对象的关键属性信息
5、在脚本中记录该对象和他相应的动作
回放原理:
1、从脚本中获取对象(item字段--控件)
2、在对象仓库中查找该对象,记录该对象的关键属性信息
3、根据获取的关键属性信息去被测程序上查找
4、如果对象的关键属性信息比较一致,按照脚本驱动测试程序
四、将对象添加到对象仓库
1、在对象仓库中添加--AddObjectstoLocal
a.准备好被测程序(显示要添加的对象)
b.进入对象仓库(Resources--ObjectsRepository)
c.点击带加号的按钮(AddObjectstoLocal)
d.出现小手--去点击需要添加的对象(如果对象被覆盖,长按Ctrl键)
e.正确选取需要添加的对象(类型、名称)--OK
2、ActiveScreen
a.选中录制时生成代码
b.QTP左下角的位置切换到ActiveScreen界面
c.查看需要添加的被测对象是否显示(a步骤重新选择代码)
d.选择需要添加的被测对象(右键)--View\AddObjects...
e.确认所添加的对象是否正确--AddtoRepository
f.点击ViewinRepositoty--查看对象仓库,对象是否添加成功
五、对象仓库的类型
1、本地对象仓库--Local
2、共享对象仓库--Shared
本地对象仓库生成的途径:
录制脚本时生成的对象仓库(添加对象到对象仓库)
共享对象仓库生成的途径:
a.将本地对象仓库导出:
ObjectRepository--File--ExportLocalObjects...
b.保存本地对象仓库(.tsr)
c.新建脚本关联对象仓库:
Resources--AssociateRepositories
点击加号按钮添加对象仓库文件--自动识别对象仓库中的Action--双击(箭头按钮)需要关联的Action
d.共享的对象仓库里的对象不能更改
e.如果想更改共享对象仓库里对象的属性--右键需要更改的对象--CopytoLocal
PPT2recording
一、认识WindowsWeb常用的控件
二、检查点
1、作用:
检查点--设置预期结果回放脚本--实际结果
如果相等,reporter--Passed
如果不相等,reporter--Failed
2、类型
标准检查点:
检查的是对象的属性
添加方法:
1、Insert菜单
a.录制脚本时,准备被测程序需要添加检查点的对象
b.Insert--CheckPoint--StandardCheckPoint
c.用小手抓取需要添加检查点的控件(Ctrl)
d.确认添加检查点对象的名称、类型
选择需要检查的属性(光标选中此属性)
设置预期值(Constant)
设置超时时间timeout
2、ActiveScreen
a.正确选取当前步骤
b.在ActiveScreen界面--选择需要添加检查点的对象(右键)
c.InsertStandardCheckpoint
d.确认添加检查点对象的名称、类型
选择需要检查的属性(光标选中此属性)
设置预期值(Constant)
设置超时时间timeout
选择当前步骤之前or当前步骤之后
PPT3recording
一、多Action
1、代码中实现多Action方法:
CalltoNewAction:
a.Insert--CalltoNewAction
b.设置新添加Action的名字
对新添加Action的描述
复选框--设置Action的种类:
勾选--ReusableAction
不勾选--non-ReusableAction
单选钮--设置新添加Action与之前Action的关系
Attheendoftest--顺序(兄弟)
Afterthecurrentstep--层次(父子)
生成新的Action:
1、每个Action对应拥有自己的sheet页
2、每个Action对应拥有自己的对象仓库
CalltoExistingofAction:
调用已经存在的Action
a.Insert--CalltoExistingofAction
b.选择要调用Action所在的test(脚本)
选择需要调用的可复用的Action
描述该Action
单选钮--设置所调用Action与之前Action的关系
Attheendoftest--顺序(兄弟)
Afterthecurrentstep--层次(父子)
调用已经存在的Action:
1、只能调用可复用的Action
2、调用过来的Action只能以只读的方式使用,不能修改
3、调用过来的Action生成新的种类--外部的Action(External)
CalltoCopyofAction:
拷贝其它脚本的Action
a.Insert--CalltoCopyofAction
b.选择要拷贝Action所在的test(脚本)
选择需要拷贝的Action
描述该Action
单选钮--设置所拷贝Action与之前Action的关系
Attheendoftest--顺序(兄弟)
Afterthecurrentstep--层次(父子)
拷贝已经存在的Action:
1、可以拷贝可复用、不可复用的Action
2、拷贝过来的Action可以进行修改
如果需要调整Action的执行顺序:
a.切换到关键字视图--在左侧的下拉框切换到TestFlow
b.用鼠标拖拽Action--调整其执行顺序
Action的种类:
1、可复用的Action(ReusableAction)
2、不可复用Action(non-ReusableAction)
(3、外部的Action--ExternalAction)
split:
切分Action
切分的标识--切分出来的下一个Action代码的第一行
a.点击splitaciton按钮
b.选择切分出来的两个Action的关系
independentofeachother--顺序(兄弟)
Nested--层次(父子)
分别给两个Action重新命名
三、Action参数化
设置方法:
将参数化的数据放到Action对应的sheet中
打开Action循环开关:
关键字视图(TestFlow)--选中某一Action--右键--Actioncallproperties--Run选项卡
Global:
1、测试数据针对整个脚本
2、循环开关默认是循环所有行
3、File--Settings--Run
Action:
1、测试数据针对当前sheet所对应的Action
2、循环开关默认是循环一次
PPT4recording
一、VBS过程
过程:
实现某一功能的代码段,放到sub,或者function中,以便后边的调用
注意:
1、构造无参数过程,在过程名后要写上空括号
2、构造有参数过程,过程名后写的是形式参数,参数之间用,相隔,调用过程时,传递实际参数
3、sub过程没有返回值,function过程有返回值--在过程中将返回值赋值给过程名
二、int、fix、cint、rnd
int(number)
处理规则:
正数--舍掉小数部分,保留整数部分
负数--舍掉小数部分,整数部分-1
fix(number)
处理规则:
正负数一致--舍掉小数部分,保留整数部分
cint(expression)
cint(strint)--string-->int
cint(number)
处理规则:
正负数一致--遵循四舍五入,但是.5特殊
.5处理规则:
正负数一致--返回的数据是离number最近的一个偶数
rnd
作用:
获取0~0.9......随机小数
取消根据次数随机的规则:
randomize
三、VBS的错误处理
1、onerrorresumenext
2、File--Settings--Run--Whenerroroccuresduringrunsession(1、弹出错误提示框2、运行下一个Action3、停止脚本4、运行下一行代码)
四、认识Expertview
1、专家视图中描述控件的方法:
控件的类型("控件的名称")
2、对象与对象之间用.
3、对象与操作之间用.
4、操作用操作数之间用空格
五、检查点的返回值
1、将检查点的参数加括号
2、检查点的返回值类型:
布尔类型
PPT5recording
一、取值和赋值
取值:
RawValue
printDataTable.RawValue("ParameterId","sheetId")
参数一:
ParameterID--"列名"|indexindex从1开始
参数二:
SheetID--"表单名"|indexindex从1开始|dtGlobalSheet从Global表单中取值|dtLocalSheet从代码所在的Action对应的表单中取值
printDataTable("ParameterID","SheetID")---RawValue可省略
赋值:
value
value也可以用于取值--用法同RawValue
赋值:
DataTable.Value("ParameterID","SheetID")="NewValue"
无论取值和赋值value均可省略:
DataTable("ParameterID","SheetID")="NewValue"
注意:
赋值过程发生在脚本运行中,所以所赋新值不会更改原先DataTable中的数据,想要查看所赋的新值,在Repoter-Run-timeDataTable
二、数据表的导入导出
导入:
DataTable.Import"FileName"
FileName:
外部Excel表单的文件名以及路径
FileName可以使用相对路径--前提条件:
将Excel文档放到脚本文件夹中
如果Excel、QTP表单个数不一致--以少数为主
DataTable.ImportSheet"FileName","Excel_sheetname","QTP_sheetname"
将Excel里某个表单(参数二)导入到QTP中某张表单(参数三)
注意:
1、导入之后,QTP的表单名称不变
2、导入过程发生在脚本运行中,脚本运行结束,导入进来的数据消失
PPT6recording
一、环境变量Environment
1、设置位置:
File--Settings--Environment
2、作用:
实现数据共享的时候使用
3、分类:
内置的环境变量Built-In
用户自定义的环境变量User-defined
内部的Internal:
通过点击加号按钮新添加生成的环境变量
外部的External:
通过共享环境变量的XML文件
4、内置的环境变量的性质:
不能新添加、不能删除、不能修改、不能导出、不能导入、不能在代码中修改其值
常用的内置环境变量:
ActionIteration:
保存的是Action反复到第几次
TestIteration:
保存的是Test反复到第几次
TestName:
保存的是脚本的名称
TestDir:
保存的是脚本的路径
OS:
操作系统
5、用户自定义的环境变量的性质:
Internal:
可以新添加、可以删除、可以修改、可以导出(Export--XML)、可以导入、可以在代码中修改其值
External:
同Built-In
二、随机数RandomNumber
res=RandomNumber(初值,终值)
返回值res:
为初值与终值之间的随机数
ForeachActionIteration---Action(默认)
ForeachTestIteration--Global
Onceperentiretestrun--Test
三、参数化的类型
1、DataTable
2、Environment
3、RandomNumber
四、输出值可以保存的位置
1、DataTable
2、Environment
PPT7recording
一、TO&RO
TO:
仓库对象or录制对象
RO:
运行时对象or被测系统上的对象
TO:
录制和编辑的方法:
TO生成:
录制时,通过抓取RO,将对象保存到对象仓库--对象仓库中存在的对象就叫做TO
TO编辑:
1、进入对象仓库,修改仓库对象的属性
2、在代码运行中,通过SetTOProperty进行修改
RO编辑:
1、通过对对象具体的操作(测试)
2、通过编码的方式(开发)
TO的属性值范围大于RO的属性值范围
二、TO的相关函数
1、GetTOProperty
语法:
property_value=object.GetTOProperty("property_name")
作用:
获取仓库对象的某个属性对应的属性值
2、GetTOProperies
语法:
setprops=object.GetTOProperties
作用:
获取某仓库对象GetTOProperies这个函数认为重要的属性对
获取属性对的总数:
props.count
取属性对的属性名和属性值---属性对的编号从0开始
Fori=0toprops.count-1
printprops(i).name&"="&props(i).value
Next
3、SetTOProperty
语法:
object.SetTOProperty"property_name","property_value"
作用:
运行时,修改仓库对象的某个属性的属性值
三、RO的相关函数
语法:
property_value=object.GetROProperty("property_name")
作用:
获取运行时被测软件(RO)上某个对象的属性的属性值
四、描述性编程
1、分类
初级描述性编程(直描)
Description对象描述性编程
2、QTP识别对象的两种机制
a.通过对象仓库识别通过TO寻找和操作RO
b.通过描述性编程通过RO寻找和操作RO(抛弃TO)
第一个RO指的是脚本中的属性对
第二个RO指的是回放脚本时,弹出来的被测软件
3、描述性编程的过程:
a.通过使用objectSPY在被测软件上抓取对象,获取其关键属性(类型classtype名称textattachedtextname索引id)
b.编写脚本:
1、写上被测对象的类型2、在类型后写上一对括号
3、括号里写上至少两对双引号,每对双引号之间用逗号相隔4、双引号内写上描述该对象的属性对--属性对的书写方法:
属性名:
=属性值:
=两边不允许有空格
c.注意操作对象的结构,不要忘了补充操作对象的方法和值
4、初级描述性编程可以解决的问题:
a.对象无法识别的问题
b.如果识别到了相同的对象,使用描述性编程
5、index
编号规则:
将对象编号,并且从0开始
eg:
有5个相同的对象,使用index属性后,将对象分别编号为:
01234
处理规则:
处理完一个相同的对象之后,重新编号
01234
0123
012
01
0
解决此问题:
将index:
=0
6、简化
将对象赋值给变量(set)
With...EndWith
7、描述性编程的属性值,默认为是正则表达式格式
8、Description描述性编程
创建Description对象:
setmydes=Description.Create()
给Description对象赋值一些属性,用来描述控件:
mydes("property_name").value="property_value"
property_value本身是正则表达式格式,如果想取消属性值的正则表达式属性:
mydes("property_name").RegularExpression=False
作用:
a、用来描述对象--方便管理、可以修改属性值的正则表达式格式
b、用作ChildObjects的参数
9、ChildObjects
语法:
setChildO=Object.ChildObjects(mydes)
作用:
取得object这个父对象上的所有满足Description对象描述的子对象,将获取的子对象保存在变量ChildO中,将对象赋值给变量(set)
获取子对象的总数:
Tnum=ChildO.count
遍历操作所有的子对象:
Fori=0toTnum-1
ChildO(i).set"admin"
Next
随机操作其中一个子对象:
Rnum=RandomNumber(0,Tnum-1)
ChildO(Rnum).click
作业:
用Flight3a录制脚本:
登录--订票--发送传真--退出
回放脚本时用Flight4a
PPT8recording
一、QTP的录制模式:
1、正常录制Record
2、模拟录制Record--Automation--AnalogRecording
3、低级录制Record--Automation--Low_LevelRecording
正常录制:
录制的是对象(对对象做操作)
模拟录制:
录制的是鼠标的移动轨迹
a.相对于屏幕:
窗口需要发生移动或者需要在2个以上的窗口录制鼠标的移动轨迹
Desktop.RunAnalog"Track1"
b.相对于窗口:
生成的保存鼠标移动轨迹的文件里只保存在窗口内的鼠标移动轨迹
Window("窗口的名称").RunAnalog"Track1"
低级录制:
录制的是对控件操作的精确位置
注意:
1、操作后如果带xy坐标,这个坐标指的是控件所在其父对象上的xy坐标
2、如果操作加密输入框,输入操作为Type,密码明文显示(安全系数不高)
3、将所有被操作的对象识别为WinObject,所有的父对象识别为Window
4、正常录制模式下,无法录制的键盘操作(***)
二、Web系统参数设置
Tools-->WebEventRecordingcofiguration
作用:
细化鼠标的操作
三、ActiveScreen捕获截图级别设置
None:
不捕获任何对象到ActiveScreen中
Min:
捕获每一步操作到的对象以及其父对象
Par:
第一步的时候,捕获被操作对象and其父对象and父对象下所有的子对象,如果接下来的步骤遇到该父对象以及该父对象下的所有子对象,不再捕获
complete:
每一步都捕获被操作对象and其父对象and父对象下的所有子对象
四、虚拟对象
解决问题:
解决回放脚本时,对象无法识别的问题
如果1、添加对象到对象仓库2、正则表达式3、描述性编程
都无法解决对象无法识别的问题,那就是可能是QTP本身无法识别该对象,考虑使用虚拟对象那个
创建过程:
Tools-->VirtualObjects--NewVirtualObject
a.选择该对象所要被虚拟的类型
b.点击MarkObject,用十字型的鼠标选中所要虚拟的对象
c.选择该虚拟对象的父对象(***)
d.给该虚拟对象重新命名,选择所要保存的.vot文件
e.使用该虚拟对象重新录制脚本(***)
虚拟对象管理:
Tools-->VirtualObjects-->VirtualObjectManager
可以新建虚拟对象所要保存的文件,可以删除虚拟对象以及其文件
复用该虚拟对象:
找到保存虚拟对象的文件:
QTP安装目录--dat-->VoTemplate
将该文件夹下保存的.vot文件拷贝到另外机器上的相同文件下,可以实现虚拟对象的复用
五、字符串的加密和解密
字符串的加密:
1、QTP-->Tools-->PasswordEncoder
2、DataTable--将需要加密的字符串书写到DataTable中的单元格内-->选中此单元格点击右键-->Data-->Encrypt(给加密输入框参数化的时候DataTable)
3、res=Crypt.Encrypt(str)--str为需要加密的字符串,res为加密过的字符串(在脚本执行中,需要输入加密的字符串)
解密:
将明文显示的输入框的操作方法更改为:
SetSecure-->将加密过的字符串接到此方法后,运行脚本,密码就显示在明文输入框中
PPT9recording
一、Window常用控件的高级测试
1、WinComboBox
select
WinComboBox.select"内容"|WinComboBox.selectindex
index从0开始
随机选择三步骤:
a.获取控件下内容的总数:
方法一Tnum=WinComboBox.GetItemsCount
方法二Tnum=WinComboBox.GetROProperty("itemscount")
b.获取随机数
Rnum=RandomNumber(0,Tnum-1)
‘Rnum=RandomNumber(1,Tnum)
c.进行随机选择
方法一
WinComboBox.selectRnum
方法二
res=WinComboBox.GetItem(index)
index从0开始
获取index对应的下拉框中的内容
res=WinComboBox.GetItem(Rnum)
WinComboBox.select