QTP高级应用(7)
1.1使用Call new Action命令创建一个新的Action
1.2使用Call copy of Action命令复制其他测试的Action
1.3使用Call Existing Action命令调用其他测试的Reusable Action
一、实验目的
1)掌握QTP的Action和Action参数化
2)熟悉专家视图
3)了解QTP内置函数的使用
二、实验的步骤和方法
首先录制一段脚本
1.创建Action
1.1使用Call new Action命令创建一个新的Action
执行菜单【Insert】【Call new Action】命令,
或者单击工具栏上的按钮,
在弹出的对话框中可以创建一个新的Action
Reusable Action:如果选中此复选框,则该Action可以被其他测试脚本调用。但其他测试脚本不能对其进行修改。
每个Action都有一个对应的数据表,右击测试脚本本身的Action(而不是调用其他脚本中的Action),在右键菜单中执行【ActionProperties】命令。
在弹出对话框中单击【General】选项卡,可以设置Action的基本属性。
1.2使用Call copy of Action命令复制其他测试的Action
执行菜单【Insert】|【Call copy of Action】命令,可以复制其他测试的Action到当前测试中来。
复制时系统会先提示一个选择Action的对话框
Edit New action properties:指定是否要更改该Action的属性,如果选中该复选框,则单击【OK】按钮后,系统会弹出Action的属性对话框,让测试人员根据需要进行更改
1.3使用Call Existing Action命令调用其他测试的Reusable Action
执行菜单【Insert】|【Call Existing Action】命令,可以调用其他测试的Reusable Action到当前测试中来。
调用时,系统首先提示选择Action对话框。
该方法只能调用外部脚本中具有“Reusable Action”属性的Action。
1.4通过分割方式产生新的Action
QTP还提供了一种创建Action的特殊方式,就是把一个Action分割成多个Action,这样测试人员就可以先录制一个整体的测试脚本,然后再根据需要将脚本分割成不同的Action。
在分割Action对话框中,根据需要对如下参数项进行设定
在【The actions are】选项区域中,可以设定分割后两个Action的从属关系。如果选中第一个【Independent of each other】单选按钮,表明两个Action是并列的关系;选中第二个【Nested】单选按钮,表明这两个Action是嵌套关系,第二个Action属于第一个Action,是被第一个Action调用的。
在【1st action】和【2nd action】两个选项区域中,可以分别设定两个Action的名称和描述信息
2.Action的参数化
在QTP中每创建一个Action,在Data Table中就会增加一个相应的Sheet,也就是说,除了所有脚本都可以使用的Global Sheet外,QTP还在Data Table中为每个Action创建了一个单独的Sheet(后面的介绍中,称为Action Sheet)。
Global Sheet是针对脚本的,Action Sheet是针对对应的Action的,这有点像程序中全局变量和局部变量的概念。测试人员向Data Table中输入数据或者将测试中的数据输出到数据表时,可以根据需要选择使用哪一种,这在参数化脚本的时候比较重要,如果指定Global Sheet中的数据作为参数化数据,那么将应用到整个脚本,即整个脚本执行多次反复。如果指定Action Sheet中的数据作为参数化数据,则只有相应的Action执行多次反复。
系统默认情况下,不管一个ActionSheet中有多少条记录,被参数化的Action都只执行一次反复,如果想让一个Action执行多次反复,则需要在Action Call Properties中进行设定
3.专家视图
3.1在专家视图中编辑测试脚本的方法
关键字视图与专家视图使用的是同一套对象库。在关键字视图中,通过单击【item】列中的单元格来选择测试对象,
而在专家视图中,则是使用以下方式。
(1)输入测试对象顶层对象的控件类型名,例如Dialog,然后输入“(”,则QTP的脚本编辑器会自动列出对象库中匹配的测试对象,如果匹配的仅有一项,则会自动完成测试对象的选择和输入,例如“Dialog("Login”)”
(2)输入一个测试对象后,就可以访问其下的属性、方法,以及下级对象,如
其中,“Activate”、“Click”等都是该测试对象的可用方法,而“Exist”则是该测试对象可用的属性。另外,还可以访问该测试对象下级的测试对象
(3)选择“WinEdit”后,再输入“(”,则QTP会自动列出“Login”窗口所包含的类型为“WinEdit”的下级控件
(4)完成测试对象的选择后,可输入“.”,选择针对该测试对象作出的操作。例如,给输入框输入文字,可用“Type”方法,也可用“Set”方法
3.2输入代码注释
在关键字视图中,有专门的一列“Comment”用于输入测试步骤的注释,而在专家视图中,则需要像编写VBScript代码一样编写注释语句。在VBScript中,注释符号为“.”或“REM”。例如,下面两段代码的注释效果是一致的。
另外,注释语句可以写在测试步骤的语句前面,也可以写在语句后面,例如:
Dialog(“Login”).Activate’定位到登录窗口
但是,写在前面与写在后面在关键字视图中的表现是不一样的
可看到,如果注释写在上面,则在关键字视图中会以单独的一行表示。在“Item”中,以“Comment”表明这个测试步骤是一个注释。
3.4自动化VBScript语法识别和完成
在QTP的专家视图中,支持自动化的VBScript语法识别和完成。例如,在脚本编辑器中输入“if”,然后按空格键,则QTP将自动输入如下代码:
这是由于QTP识别出输入的关键字“if”,只要【Auto expand VBScript syntax】复选框被选中,就能自动识别和完成VBScript语法的输入。通过执行菜单【Tools】【View Options】命令,打开该界面,确保【Auto-expand VBScript syntax】复选框被选中。
4.QTP内置函数的使用
4.1使用Print函数显示信息
Print函数可用于在测试过程中显示输出信息,在测试脚本的运行过程中,Print Log窗口将保持打开状态。例如,下面的脚本在测试过程中,将显示如下界面。
' 定位到FlightsTable窗口的WinList控件
Set FlightsList = Window("Flight Reservation").Dialog("Flights Table").WinList("From")
' 获取WinList控件中的所有项,并通过Print方法显示出来
For i = 1To FlightsList.GetItemsCount - 1
Print FlightsList.GetItem(i)
Next
Print函数可用于测试脚本的调试,用于检查测试脚本中的某些逻辑、数据是否正确。另外一种方法是使用MsgBox。例如,上面的信息可用下面的代码,通过消息框的形式显示出来。
Dim str
'定位到Flights Table窗口的WinList控件
Set FlightsList = Window("Flight Reservation").Dialog("Flights Table").WinList("From")
'获取WinList控件中的所有项,并通过Print方法显示出来
For i = 0 To FlightsList.GetItemsCount - 1
str = str + FlightsList.GetItem(i) + vbCrLf
Next
MsgBox str
4.2使用Wait函数暂停测试脚本的执行
在脚本的一个阶段结束后可以增加例如wait 2的代码,意思是等待两秒,后面可以加入循环语句,让前面的脚本重复执行。
4.3使用ExecuteFile执行VBScript脚本
ExecuteFile函数可用于执行指定的VBScript脚本文件,并且一旦脚本文件运行起来后,脚本文件中的函数都可以被直接调用。例如,假设“MyFunctions.vbs”脚本文件包括以下内容:
那么可以在QTP中编写如下代码来执行该VBScript脚本,并且调用其中的AddTest函数,如以下代码所示:
测试脚本运行过程中,将弹出两个消息框,第一个是执行“MyFunctions.vbs”脚本中的“AddTest1,1”所产生的,第二个是直接调用AddTest函数所产生的,并且通过调用函数AddTest,在PrintLog窗口中显示返回结果。