QTP之Action间传参

来源:互联网 发布:淘宝店招分层素材 编辑:程序博客网 时间:2024/05/22 17:40

QTP之Action间传参(转)

 

Action间传递参数的三个方法(变量访问和共享)

通过DataTable共享

DataTable对于每个Action都是可见的

通过环境变量共享

环境变量也是Test工程的共享变量

通过Action Parameters(参数化)的参数传递

Action的属性设置和对调用的属性设置来进行参数传递,只有有调用关系才能共享。

注意:Public声明的变量并不能让Action间共享

调用带有参数的操作:

如果所调用的操作已定义了输入和/或输出参数,还可以提供输入参数的值以及输出参数的存储位置,作为RunAction语句的参数。输入参数在输出参数之前。

对于输入参数,可以指定一个固定值,也可以指定另一个已定义的参数(数据表参数、环境参数、或调用操作的操作输入参数)的名称。输入参数将采用该已定义参数的值。

对于输出参数,可以指定一个用于存储值的变量,或者是一个已定义参数的名称。

带有参数的调用使用以下语句:

RunAtion ActionName,IterationQuantity,Parameters

例如,从Action1调用Action2,并且Action2有一个已定义的输入参数和一个已定义的输出参数。

RunAtion Action2,oneIteration,MyValue,MyVariable

为输入参数提供MyValue的字符串值,并将输出参数生成的值存在名为MyVariable的变量中。

RunAtion Action2,oneIteration,Parameter(input)

DataTable(out,dtLocalSheet)

使用为Action1input输入操作参数定义的值作为该输入参数的值,并将输出参数生成的值存储在Action1的数据表中名为out的一列中。

IterationQuantity(迭代次数):

oneIteration 只运行一次

allIteration 运行参数表的每一行

1-4” 只运行参数表的1-4

Action Parameters的参数传递

'RunAction "login", oneIteration,"merc","merc“

 

Dialog("Login").WinEdit("Agent Name:").Set Parameter("user")

msgbox  Parameter("user")

Dialog("Login").WinEdit("Password:").SetSecure Parameter("pass")

msgbox Parameter("pass")

Dialog("Login").WinButton("OK").Click

Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click

Dialog("Login").WinEdit("Agent Name:").Set "“

Action间传参实例:

业务流程:登录系统——新建订单——生成订单编号——通过传递订单编号查询订单

用到QTP的知识:QTPAction split(拆分)Action中参数传递

Action split(拆分)

QTP之Action间传参(转)

Nested为要按照嵌套模式划分,首先要划分一个main Action,这个main Action中去调用其他嵌套的action(:log_in,new_order,insert_order,open_order,log_out.),所以第一次划分的时候选择的是Nested. 注意一定是在Expert视图中划分,键鼠标光标放在第一行代码的前面。

main 脚本 

RunAction "log_in", oneIteration
RunAction "new_order", oneIteration
RunAction "insert_order", oneIteration,orderno
RunAction "open_order", oneIteration,orderno
RunAction "log_out", oneIteration

log_in 脚本

Dialog("Login").WinEdit("Agent Name:").Set "Cheers.Lee"
Dialog("Login").WinEdit("Password:").SetSecure "49e93b35b292190e081ad0ce13cf2b8519acfc2d"
Dialog("Login").WinButton("OK").Click

new_order 脚本

Window("Flight Reservation").ActiveX("MaskEdBox").Type "090418"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"
Window("Flight Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("FLIGHT").Click

insert_order 脚本

Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "11427   FRA   09:48 AM   LON   10:31 AM   AA     $170.47"
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "lihuichang"
Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1
Window("Flight Reservation").WinRadioButton("First").Set
Window("Flight Reservation").WinRadioButton("Economy").Set
Window("Flight Reservation").WinButton("Insert Order").Click
wait 8
Window("Flight Reservation").WinEdit("Order No:").Output CheckPoint("Order No:")

open_order 脚本

Window("Flight Reservation").Activate
Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON"
Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set Parameter("orderno")

log_out 脚本 

Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"

修改Action的传入、传出参数。

传入传出参数的数据类型建议只使用String型,且各只有1个。

传入的参数,是将数组转成字符串传入的,需要经过解析后才能使用。

action 间值传递的步骤:

1.Key_Word视图中,insert_order上右键,选择Action Properties-Parameter,Output Paramters中增加一变量orderno.

QTP之Action间传参(转)

2.insert_order actionKey_Word视图中,选择WinEdit("OderNo:")(如果没有该对象,需要在对象库中添加该对象),右键,在菜单中选择"Insert OutPut Value...",打开OutPut value Properties 窗口.

text前的复选框 打钩(选中).

Output types:中选择 Test/action parameter,zai Parameter选择oderno(这就是刚才Output中添加的变量),然后,点击"OK","OK"保存.

3.Key_Word视图中,open_order上右键,选择Action Properties-Parameter,Intput Paramters中增加一变量orderno.如图:

4.open_orderExpert View中需要将

Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set "57"

 改为:Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set  Parameter("orderno")

main action脚本改成:

main 脚本RunAction "log_in", oneIteration
RunAction "new_order", oneIteration
RunAction "insert_order", oneIteration,orderno
RunAction "open_order", oneIteration,orderno
RunAction "log_out", oneIteration

总结:

如果是需要从Action_a传参数到Action_b

那么Action_aAction Properties——》parameters ——》填写output parameters

Action_bAction Properties——》parameters ——》填写input parameters

2个位置的parameters数量最好一致,变量名最好一致。

如果userName为其中一个参数

调用的时候 name=Parameter("userName")

调用时加入参数

QTPTest 

Flow也是一个层次结构,最顶层的是Test工程,在工程下面包含NAction,通常每个Action有自己的功能,就像C语言的main函数与一般函数。在每个Action下,可能还有一个或多个的Action被调用。这就是Action的层次,一层层调用。由此就可以看出Action之间有两种关系,举个例子:

Flow下包含着Action1Action2,而Action1下包含Action3Action4Action3下包含Action5。那么Action1Action2之间就是兄弟关系,而Action1Action3是父子关系。另外还有一种特殊的关系,Action1Action5,它们通过Action3来联系。

Action的拆分

形式只有兄弟或者父子两种。父子关系就存在调用。

Action的合并有多种方式。

Call一个新的ActionCall一个已经存在的ActionCall一个存在Action的拷贝。而每种方式又有两种模式,在Test工程的结尾调用或者在当前步之后调用。在Test工程的结尾调用:相当于与已经存在的Action是兄弟关系,而且新的ActionTest工程的末尾。在当前步之后调用:就是在当前插入了一句调用新的Action的代码,当前步结束就执行被调用的Action

只运行单个Action

搜索到RunAction所在目录,文件存储位置下,找到Action0——Script.str,注释掉不需要的Action语句。

action设置为 reusable action(可复用)

重新写一个脚本,调用要运行的action

如:新建一个脚本:callAction

RunAction "Action2", oneIteration

说明:insert call to copy… 与 insert call to Exists

假设要在ActionA中调用ActionB 

call 是获得ActionB的引用,如果原本的ActionB的内容发生了变化,那么ActionA中的内容也跟着变化,且不能在ActionA中对ActionB修改。

copy 是把ActionB的脚本复制到ActionA中,得到ActionB的一个copy,修改ActionB_copy不对ActionB造成影响,修改ActionB也不对ActionB_copy造成影响。

Action的迭代模式

  Action的迭代次数根据两个因素:一是调用或者设置的迭代次数:oneIteration或者allIteration或者“1-n”;

DataTable中的数据行数:Global是全局的,作为Test工程迭代数据、每个Action又有各自的sheet

Action间的参数传递

Action间的参数传递可以通过设置来实现,也可以进行参数化,在Call  properties来进行设置。其中的参数传递必须要有直接的父子结构才行,如果像前面说到的Action1Action5,它们就不能直接来进行参数的传递,而必须通过中间的Action3来实现。

通过Action参数来传递数据

Action2的脚本如下:
Input Parameters
Message Parameter("Msg")
Msgbox Message
Output Parameters
If NOT Message "" Then
Parameter("ReturnMsg") "The Message is Message
Else
Parameter("ReturnMsg") "The Message is Empty!"
End If

RetuenValue
ExitAction Exit Action!"
'ExitAction Parameter("ReturnMsg")

通过Action参数来传递数据:

3种调用Action的方法,Action1的脚本如下:
调用Action2,输入参数为 “ Hello!”,把输出参数值写到ReturnMessage1变量
RunAction "Action2", oneIteration,"Hello!" ,ReturnMessage1
Msgbox ReturnMessage1
调用Action2,输入参数为 “ Hello!”,通过Parameter方法读取输出参数值
RunAction "Action2", oneIteration,"Hello!"
ReturnMessage2= Parameter("Action2","ReturnMsg")
Msgbox ReturnMessage2

如果被调用的Action使用了ExitAction来退出Action并返回ReturnValue,则可以使用下面的方式来获取Return Value的值
注意OutPut ParametersReturn Value的区别
ReturnMessage3 RunAction( "Action2", oneIteration ,"Hello!")
Msgbox ReturnMessage3

通过全局数据表来共享数据:

通过全局数据表(Global Data Table)来共享数据
Action1中设置参数值,Action1的脚本如下:
获取全局数据表
Set Sheet DataTable.GetSheet("Global")
查找参数列
Set Parameter1 Sheet.GetParameter("Column1")
Set Parameter2 Sheet.GetParameter("Column2")

设置参数值
Parameter1.Value="Hello"
Parameter2.Value="World!"
调用Action2Action2将使用前面设置的参数值
RunAction "Action2", oneIteration

Action2中读取参数值,Action2的脚本如下:
获取全局数据表
Set Sheet DataTable.GetSheet("Global")
读取参数值
Set Parameter1 Sheet.GetParameter("Column1")
Set Parameter2 Sheet.GetParameter("Column2")
使用参数值
Msgbox Parameter1 &" Parameter2

检查点总结:

文本检查点:用于检查文本字符串是否在应用程序中的适当位置出现。适用于所有的环境。

文本域检查点:检查文本字符串是否出现在Windows Application的已定义区域。不适用与WEB环境

位图检查点:把网页或者应用程序的某个区域当作位图来检查。适用于所有的环境。

图像检查点:用于Web页面中的图像属性,如图像类型、图像名称、图像文件来源、图像内容等。只适用于WEB页面。

位图检查点会检查两张图的外观是否一致,比如分辨率、颜色、对比度等。而图像检查点只检查图像的属性,当只勾选图像的名称时,即使图像内容不一致,检查也是通过的。

插件与检查点的关系:


QTP之Action间传参(转)

Smart Identification(智能识别)

如何开启Smart Identification(智能识别)

Test Setting -> Run mandatory properties->assistive properties -->Smart Identification ->ordinal identifier

Test Batch Runner

QTP中,对于多个Action测试,可以进行批量运行测试:

可以使用QTP自带的工具“Test Batch Runner”来批量运行测试脚本。

为了让“Test Batch Runner”可以运行测试脚本,需要在QTP中选择菜单“Tool Option ”,打开界面,确保“Allow other Mercury products to run tests and components”选项被勾选上。

步骤:通过选择“开始 所有程序 QuickTest Profesional Tools Test Batch Runner”启动;并通过Add来添加需要运行的测试脚本;然后通过Batch Run 来批量运行列表中的所有测试脚本。

0 0
原创粉丝点击