QTP中部分方法说明
1、ChildObjects方法,用来获取某个父对象下面的所有子对象
set CO=Window("Form1").ChildObjects() 参数为空,获取所有子对象
可在ChildObjects方法中使用Description对象,选择性的获取子对象
2、写入Result
Report.ReportEvent micPass/micDone.....
Description对象
来源网址:http://www.51testing.com/?uid-331265-action-viewspace-itemid-240166
Description对象
1、使用Description对象,首先要创建:Set MyDescription = Description.Creat()
title="计算器"
Window("regexpwndtitle:="& title).Move 908,234
用Description对象:
Set MD=Description.Create()
title="计算器"
MD("regexpwndtitle").Value=title
Window(MD).Activate
2、测试对象的属性描述都包装在了Description对象中,用Description对象的实例来代表一个测试对象的属性描述。
3、属性描述信息的字符串默认会被当成正则表达式处理,需要使用“\”转义,或者设置Description对象的RegularExpression属性为False:
MD("RegularExpression").Value = False
4、一旦父对象使用描述性编程,则后续子对象也需要通过描述出现
QTP描述性编程
QTP有两种描述性编程的开发方式:一种是直接描述的方式,另一种是使用Description对象的方式。
QTP把描述性编程中所有“描述”控件属性的值当成正则表达式来处理,因此如果输入的描述包含某些特殊字符,如“*、?”等在正则表达式中有意义的字符,需要在字符前加上“\”。
一旦父对象使用描述性编程,则后续子对象也需要通过描述出现。
直接描述编程的说明
Window("regexpwndtitle:=计算器").Move 908,234
wait(2)
Window("regexpwndtitle:=计算器").Move 345,234
title="计算器"
wait(2)
Window("regexpwndtitle:="& title).Move 908,234
1、直接描述方式的语法格式:
TestObject("PropertyName1:=PropertyValue1","PropertyName2:=PropertyValue2"....)
注意:属性和属性值之间用“:=”分隔开
2、如果在测试对象层次结构的某一点开始使用了描述性编程,则该测试对象层次结构下的后续测试对象都要使用描述性编程的方式来描述对象。一旦父对象使用描述性编程,则后续子对象也需要通过描述出现。
3、使用描述性编程后,对象库中没有存对象。
4、使用描述性编程时,可以先使用Object Spy查看对象属性后,再添加属性及属性值,以防属性添加错误。
5、使用描述性编程时,可以把描述赋值给变量,以增加代码可读性,如
set i = Window("regexpwndtitle:=计算器")
i.Move 908,234
6、使用With简化代码
With Window("regexpwndtitle:=计算器")
.Activate
.move 908,234
End With
Recovery Scenario的使用
创建Recovery Scenario并关联到某个测试脚本,在QTP遇到非预期的事件或错误时,Recovery Scenario会被相应的时间触发执行,恢复脚本的执行控制权。
使用向导创建Recovery Scenario:Resources--Recovery Scenario Manager
关联:File--Settings--Recovery
Setting对象的使用
使用Setting来进行设置:Setting("DefaultTimeout")= 30000 (毫秒) 与在File--Test Setting--Run中设置Object synchronization timeout效果一样。
获取DefaultTImeout也是使用Setting对象:DT=Setting("DefaultTimeout")
通过Setting可以修改File--Setting和Tools--Options中的值,但实际并没有改变这两项中的值,只在当前的QTP会话中有效。
有Exists,Add,Remove方法和Item属性
例:判断名为“a”的Item属性是否存在,创建及移除
With Setting
If not .Exists("a") then
.add "a",2
else .item("a")=.item("a")+1
End if
msgbox .item("a")
.Remove("a")
msgbox .item("a")
End With
说明:Setting的Item属性在整个测试项目的各次运行之间有效,即下一次脚本运行能保持上次运行的值。即第一次运行以上脚本msgbox .item("a")值为2,第二次为3.
QTP内置函数
1、print
2、msgbox:会暂停脚本的执行,直达消息窗口被关闭才会继续执行后续的测试脚本
3、wait
4、ExecuteFile执行VBScript脚本,脚本文件中的函数可以被直接调用。
ExxcuteFile “VBScript的路径及名称”
虚拟对象管理
定义虚拟对象(Virtual Object)可以让QTP学会i认识某些不能识别的控件,并且将这些控件映射到某类标准对象,从而可以对这些对象进行录制和运行测试。
定义虚拟对象:Tools--Virtual Objects--New Virtual Object,根据坐标来确定虚拟对象的范围
管理虚拟对象:Tools--Virtual Object--Virtual Object Manager
QTP的Utility对象使用
可从Insert--Step Generator,选择Category为Utility Objects后,Object中查看到Utility的对象。
1、使用PathFinder对象查找文件
在Tools--Options--Folders中添加QTP用于搜索文件的目录,PathFinder.Locate("需要查找的文件名")
2、使用Reporter对象写入测试结果
Reporter.ReportEvent micDone(micPass,micFail,micWarning)
3、Environment对象的使用
通过Environment对象可以读取和设置环境变量。环境变量包括Built-In和User-defined两种类型。Built-In是内建的环境变量,只能读取;User-defined是用户自定义的环境变量,可以设置和读取。
如读取内建环境变量:OS=Environment.Value("OS")
设置用户自定义环境变量:Environment.Value("User")=10
导入外部文件:Environment.LoadFileFrom("路径")
读取当前导入的环境变量文件名:filename=Environment。ExternalFimeName
随机数参数化
GetItemsCount:返回下拉框的Item数目
如:ItemCount = Window("Flight Reservation").WinComboBox("Fly From").GetItemsCount
SelectItem =RandomNumber(0,ItemCount)
Window("Flight Reservation").WinComboBox("Fly From").Select SelectItem
Data Table参数化
Global Data Table
例:Windows("FlightReserver").WinComboBox("Fly From").SelectDataTable("p_From",dtGlobalSheet)
需要将Global DataTable中第一列更名为“p_From”。
第一个For循环:File中数据;
第二个for循环:Action中次数
假设Local Data Table中共有n行数据
For(i=1;i++;i< File--Settings--Run中次数) 如Run all rows代表n次,若Run from row to row 不是从第一行开始,则i不是从1开始Run from row 1 to row 4,代表3次
{
For(j=1;j++;j< Action Call Properties中的次数)如Run from row 1 to row 4,代表3次,若Run from row to row 不是从第一行开始
运行第i行数据;
}
File--Settings--RunAction Call PropertiesResult
Run one iteration onlyRun one iteration onlyOne iteration运行数据表中第一行
Run all rows数据表中共有n行,运行数据表中第一行n遍
Run from row to rowfrom row to row中隔多少,就运行数据表中第一行多少遍
Run all rowsRun one iteration only迭代数据表中所有行
Run all rows数据表中有n行,第一行运行n遍,第二行运行n次,一次到第n行运行n遍
Run from row to row数据表中有n行,若Run from row 1 to row 3,则第一行运行3次,第二行运行3次,依次类推到第n行运行3次
Run from row to rowRun one iteration onlyFile中选择的行迭代
Run all rows若File中选定行为1-2,数据表中共有n行,则row1运行n次,row2运行n次
Run from row to row若File中选定行为1-2,Action中选定行为1-3,则第一行运行3次,第一行运行3次
Action Data Table
说明:1、File--Settings—Run中是把Local DataTable作为一个整体,Run all rows时,取Local DataTable中的行数n,将整个Local DataTable中数据迭代n次,即共n*n次。
2、其中一个设置为Run one iteration only时,迭代根据另一个的字面上意思进行,如Run all rows,就是迭代数据表中所有行。
第一个For循环:File中次数;
第二个for循环:Action中数据
假设Local Data Table中共有n行数据
For(i=1;i++;i< File--Settings--Run中次数) 如Run all rows代表n次,Run from row 1 to row 4,代表3次
{
For(j=1;j++;j< Action Call Properties中的次数)如Run from row 1 to row 4,代表3次,若Run from row to row 不是从第一行开始,则j不是从1开始
运行第j行数据;
}
File--Settings--RunAction Call PropertiesResult
Run one iteration onlyRun one iteration onlyOne iteration运行数据表中第一行
Run all rows迭代数据表中所有行
Run from row to rowfrom row to row,根据设置运行第m行至第n行
Run all rowsRun one iteration only迭代数据表中所有行
Run all rows数据表中有n行,运行n*n次,依次运行n次数据表中的所有行
Run from row to row数据表中有n行,若Run from row 1 to row 3,则依次row1-3运行n次
Run from row to rowRun one iteration onlyFile中选择的行迭代
Run all rows若File中选定行为1-2,则将所有行迭代两次
Run from row to row若File中选定行为1-2,将Action Call Properties选定的行迭代2次
运行测试脚本的说明
1、运行整个测试脚本:按F5或Run按钮;
2、运行部分测试脚本:
运行当前的Action:Automation--Run Current Action;
从当前选中的测试脚本开始运行:选中一行脚本,右击选择Run From Step或Automation--Run From Step;
运行到当前选中的测试脚本:选中一行脚本,右击选择Run To Step;
3、批量运行测试脚本
QTP自带工具Test Batch Runner,可以添加多个测试脚本,然后顺序执行,但是需要在QTP中进行设置:Tools--Options--Run,勾选Allow other HP products to run tests and components。
执行的结果保存位置:
涉及到单个test run result保存的位置,如果2个都是temp的,那么batch执行完后,只能看到最后一个test的结果,在temp中的Result总是保存最近的一个,最近的会覆盖之前的Results。
如果单个test是经过保存的,则batch完后result在各自的result目录里
当中途stop一次,再run的时候提示:...aborded,需要重启Test Batch Runner。
多个test的顺序只要添加一次就会被记住,当a被删除后,再添加它,位置不变。要想改变,需要重启Test Batch Runner。
添加新的Action及关联对象库
Action就是动作,1个Action可以录制很多动作,也可以是一个动作。可以单独使用,也可以被调用复用。
增加Action:Insert-->Call to new Action
View-->Test flow能查看到各个Action,并可右击Action进行相应的操作。
关联Action的对象库:1、录制新脚本产生新的测试对象库;2、关联前一个的Action所到处的对象库文件,不能对对象库进行修改(在Object Repository中可导出对象库,打开新Action的Object Repository--Tools--Associate Repositories)
QTP识别对象原理
QTP通过将对象的属性记录在对象库中,在运行时比较运行时对象与测试对象的属性来进行识别
Object Spy:查看对象的属性和方法
Object Identification:设置识别对象的属性
Object Repository:存储测试对象的属性
对象识别的四种模式
来源网址:http://www.51testing.com/?uid-331265-action-viewspace-itemid-240166
对象识别(Object Identification)有四种模式:
1:强制属性识别(mandatory properties):必须匹配的属性
2:辅助属性识别(assistive properties):当强制属性无法识别对象时,使用辅助属性识别
3:智能识别(Smart Identification):在回放的时候进行,前提是勾选了智能识别。其主要原理为:先选择某个基本属性进行比较,若对象多于一个,再继续添加属性筛选;若添加的对象属性造成无对象匹配,则淘汰该属性,应用该方法直至找到唯一对象并对该对象。
4:顺序标识符(ordinal identifier):在录制时记录下来;在回放时会先进行智能识别,在标识符识别,前提是勾选了智能识别。
Index 表示对象在程序代码中的出现顺序,这个顺序是相对于其它具有相同属性的对象而言的。
Location 表示对象在窗口、Frame或对话框中出现的顺序,这个顺序是相对于其它具有相同属性的对象而言的。
CreationTime(仅适用于Browser对象) 表示Browser对象打开的顺序,这相顺序是相对于其它已打开的具有相同属性的对象而言的。
说明:因为强制属性是会记录其中的每个属性,如果强制属性添加太多,影响性能;辅助属性中从上至下,只要有一个属性匹配即可。QTP在录制脚本时,如果通过主属性与辅助属性已能够唯一识别对象,则不会获取对象的ordinal identifier顺序值。
识别顺序如下:
mandatory properties->assistive properties -->Smart Identification ->ordinal identifier
可在Toole-->Object Identification中进行相关属性的设置
录制方法-Record and Run Setting
打开Record and Run Settings窗口:创建新test,第一次点击Record按钮;或者Automation--Record and Run Settings
Web标签:
Record and run test on any open brower:录制和运行在任何打开的QTP所支持的浏览器(必须先打开QTP,再打开浏览器,否则会录制不到信息,【而且只能录制一个浏览器中的多个标签页信息】有待考证),也可以设置忽略一些特殊的URL,在Tools--Options--Web中设置;
Open the following address when a record or run session begins :打开一个新的浏览器来录制和运行测试,需要输入要打开的网址,选择哪个浏览器来打开,前提是安装了其他QTP版本支持的浏览器。 Do not record and run on browsers that are already open :选中此项后先于QTP打开的浏览器不会录制脚本以及不用时候Obiect Spy。
Windows Application标签:
Record and run only on :只选中这项,而不选择其下的其他选项,而且Application detail中没有添加,则表示不录制基于Windows的应用程序。
说明:这两个标签页并且的关系,如在Web端选择了打开www.baidu.com,在Application中选择录制任何程序,应用后,开始录制,则QTP会打开网页www.baidu.com,同时可录像任何的Windows Application。