收藏 分享(赏)

QTP进阶(八)-action传参专题.ppt

上传人:weiwoduzun 文档编号:5564627 上传时间:2019-03-08 格式:PPT 页数:48 大小:1.31MB
下载 相关 举报
QTP进阶(八)-action传参专题.ppt_第1页
第1页 / 共48页
QTP进阶(八)-action传参专题.ppt_第2页
第2页 / 共48页
QTP进阶(八)-action传参专题.ppt_第3页
第3页 / 共48页
QTP进阶(八)-action传参专题.ppt_第4页
第4页 / 共48页
QTP进阶(八)-action传参专题.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、QTP进阶 -Action传参,送您一句话,每天早上,一只非洲羚羊醒来, 它就知道必须比跑得最快的非洲狮子还要快, 否则它就会被吃掉; 每天早上,一只非洲狮子醒来,它就知道必须比跑得最慢的非洲羚羊还要快, 否则它就会饿死; 所以不管你是狮子还是羚羊, 当太阳升起的时候,你就得开始奔跑了 !,QTP功能介绍-拆分Action,订机票中包含两个主要事务:登录和购买机票,因此将测试拆分为不同的操作非常有意义;Action 可以复用,使代码更高效。,在脚本中使用多个Action,一个脚本中何时使用多个Action? 某个步骤需要反复执行,但其他步骤不需要反复执行,例如添加信息,一般分为登录、添加、退出

2、三步,只有添加步骤是需要重复执行,登录和退出不需要重复执行。 Action的种类 可复用Action 不可复用Action 外部Action,4,在脚本中使用多个Action,Call new Action命令用于创建一个新的Action。 Call copy of Action命令用于复制其他测试的Action。 Call Existing Action命令用于调用其他测试的Reusable Action。 通过分割方式产生新的Action,2019/3/8,5,Action传递参数,Action传递参数的三个方法(变量访问和共享) 通过DataTable共享DataTable对于每个Act

3、ion都是可见的 通过环境变量共享环境变量也是Test工程的共享变量 通过Action Parameters的参数传递对Action的属性设置和对调用的属性设置来进行参数传递,只有有调用关系才能共享。,调用带有参数的操作,带有参数的操作调用使用以下语法: RunAction ActionName,IterationQuantity,Parameters 输入参数在输出参数之前 输入参数 固定值 已定义参数(数据表参数、环境参数或调用操作的操作输入参数) 输出参数 变量 已定义参数(数据表参数、环境参数或调用操作的操作输出参数),Action Parameters的参数传递,例如, Action

4、1 调用 Action2,且 Action2 有一个已定义的输入参数和一个已定义的输出参数。 RunAction “Action2”, oneIteration, “MyValue”, MyVariable 为输入参数提供“ MyValue” 的字符串值,并将输出参数生成的值存储在名为 MyVariable 的变量中。 RunAction “Action2“, oneIteration, Parameter(name), DataTable(“out“, dtLocalSheet) 使用为 Action1 的 name 输入操作参数定义的值作为该输入参数的值,并将输出参数生成的值存储在 Act

5、ion1 的数据表工作表中名为 out 的一列中。,Action Parameters的参数传递,RunAction “aaa”,oneIteration或(RunAction “aaa”,0 ):迭代一次。(参数表只运行一行) RunAction “aaa”,allIterations或(RunAction “aaa”,1 ) :运行参数表所有行 RunAction “aaa”,”1-4”:只运行参数表1-4行。,Action间传参实例,本例的业务流程: 登录系统, 新建订单,产生订单编号,最后,通过传递这个订单编号,查询这条订单. 用到QTP的知识: QTP中Action split(拆分

6、); Action中参数传递.,Action间传参实例,首先录制一个完整流程: (1)输入用户名和密码,登录系统; (2)输入订单日期,起始地点,选择航班. (3)输入订购人名称以及数量,选择类别,点击insert产生订单.系统会自动生成订单编号. (4)通过传递该订单编号,查询这条订单. (5)退出系统.,Action间传参实例,Action间传参实例,注意: Nested是按照嵌套模式划分,因为首先要划分一个main Action,这个main Action中去调用其他嵌套的action(如:log_in,new_order,insert_order,open_order,log_out.

7、),所以第一次划分的时候选择的是Nested. 注:在Expert视图中划分,光标放在第一行代码的前面,Action间传参实例,注意: 每次在图上界面中,1st action 的Name是上一次划分时的2nd action的Name. 我们需要将这个业务流程拆分成一个main Action 和 4个Action,分别是: log_in,new_order,insert_order,open_order,log_out. 划分完成后,在main action 中产生的脚本如下:,Action间传参实例,main 脚本 RunAction “log_in“, oneIteration RunAct

8、ion “new_order“, oneIteration RunAction “insert_order“, oneIteration,orderno RunAction “open_order“, oneIteration,orderno RunAction “log_out“, oneIteration,Action间传参实例,log_in 脚本 Dialog(“Login“).WinEdit(“Agent Name:“).Set “ jojo“ Dialog(“Login“).WinEdit(“Password:“).SetSecure “49e93b35b292190e081ad0c

9、e13cf2b8519acfc2d“ Dialog(“Login“).WinButton(“OK“).Click,Action间传参实例,new_order 脚本 Window(“Flight Reservation“).ActiveX(“MaskEdBox“).Type “121212“ Window(“Flight Reservation“).WinComboBox(“Fly From:“).Select “Frankfurt“ Window(“Flight Reservation“).WinComboBox(“Fly To:“).Select “London“ Window(“Fligh

10、t Reservation“).WinButton(“FLIGHT“).Click,Action间传参实例,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“).WinEd

11、it(“Name:“).Set “David“ Window(“Flight Reservation“).WinEdit(“Tickets:“).SetSelection 0,1 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:“),Ac

12、tion间传参实例,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(“or

13、derno“) wait(8) msgbox Parameter(“no“),Action间传参实例,log_out 脚本 Window(“Flight Reservation“).WinMenu(“Menu“).Select “File;Exit“,Action间传参实例,action之间的值传递. 从insert_order action中的WinEdit(“OderNo:“)的值传给Open_order action中的OrderNo:,Action间传参实例,修改Action的传入、传出参数。 传入传出参数的数据类型只使用String型,且各只有1个。 传入的参数,是将数组转成字符串传

14、入的,需要经过解析后才能使用。,Action间传参实例,action 间值传递的步骤: 1.在Key_Word视图中,在insert_order上右键,选择Action Properties-Parameter,在Output Paramters中增加一变量orderno.,Action间传参实例,在insert_order action中Key_Word视图中,选择WinEdit(“OderNo:“)(如果没有该对象,需要在对象库中添加该对象),右键,在菜单中选择“Insert OutPut Value.“,打开OutPut value Properties 窗口. 选中text前的复选框.

15、 在Output types:中选择 Test/action parameter,在Parameter选择oderno(刚才Output中添加的变量),点击“OK“,保存.,Action间传参实例,在Key_Word视图中,在open_order上右键,选择Action Properties-Parameter,在Intput Paramters中增加一变量orderno.在open_order的Expert View中需要将 Window(“Flight Reservation“).Dialog(“Open Order“).WinEdit(“Edit“).Set “57“改为: Window

16、(“Flight Reservation“).Dialog(“Open Order“).WinEdit(“Edit“).Set Parameter(“orderno“),Action间传参实例,将main action脚本改成: main 脚本RunAction “log_in“, oneIteration RunAction “new_order“, oneIteration RunAction “insert_order“, oneIteration,orderno RunAction “open_order“, oneIteration,orderno RunAction “log_ou

17、t“, oneIteration,Action间传参总结,从Action_a传参数到Action_b Action_a的Action Properties - parameters -填写output parameters Action_b的Action Properties - parameters -填写input parameters 2个位置的parameters数量需要一致,变量名需要一致。 如果userName为其中一个参数 调用时 name=Parameter(“userName“) 调用时加入参数,Action的拆分和合并,QTP的Test Test Flow是一个层次结构,最

18、顶层的是Test工程,包含N个Action,每个Action有独立功能,像C语言的main函数与一般函数。 每个Action下,可能有一个或多个Action被调用。这就是Action的层次,逐层调用。可以看出Action之间有两种关系,兄弟或者父子。例:Test Flow下包含着Action1、Action2,而Action1下包含Action3、Action4,Action3下包含Action5。那么Action1和Action2之间就是兄弟关系,而Action1和Action3是父子关系。另外还有一种特殊的关系,Action1和Action5,它们通过Action3来联系。,Action的

19、拆分和合并,Action可以通过Split Action拆分,形式只有兄弟或父子两种。 父子关系存在调用。 直接的父子结构可以进行参数传递,如Action1和Action5,它们就不能直接来进行参数的传递,而必须通过中间的Action3来实现。,Action的拆分和合并,Action的合并有多种方式。Call一个新的Action、Call一个已经存在的Action和Call一个存在Action的拷贝。而每种方式又有两种模式,在Test工程的结尾调用或者在当前步之后调用。 在Test工程的结尾调用:相当于与已经存在的Action是兄弟关系,而且新的Action在Test工程的末尾。 在当前步之后

20、调用:就是在当前插入了一句调用新的Action的代码,当前步结束就执行被调用的Action 。,只运行单个action,脚本名称:runAction Actions:Action1,Action2,Action3并列(Location: At the end of the test) 只运行其中一个Action(如只运行Action2): 找到脚本runAction所在目录,打开Action0Script.mts,注释掉不需要的action 如: RunAction “Action1“, oneIterationRunAction “Action2“, oneIteration RunActi

21、on “Action3“, oneIteration RunAction “Action4“, oneIteration,Action间传参,将action设置为 reusable action,在脚本中创建多个Action,用Call copy of Action命令复制其他测试的Action,2019/3/8,33,在脚本中创建多个Action,使用Call Existing Action命令调用其他测试的Reusable Action,2019/3/8,34,Action的调用,说明:insert call to copy 与 insert call to Existing 假设Acti

22、onA中调用ActionB insert call to copy 是把ActionB的脚本复制到ActionA中,得到ActionB的一个copy,修改ActionB_copy不对ActionB造成影响,修改ActionB也不对ActionB_copy造成影响。 insert call to Existing 是获得ActionB的引用,如果原本的ActionB的内容发生了变化,那么ActionA中的内容也跟着变化,且不能在ActionA中对ActionB修改。,通过Action参数来传递数据,通过Action参数来传递数据 Action2的脚本如下: Input Parameter Mes

23、sage =Parameter(“Msg“) Msgbox message Output Parameters If NOT Message=“ Then Parameter(“ReturnMsg“)=“msg is “&Message Else Parameter(“ReturnMsg“)=“ok“ End If,通过Action参数来传递数据,ReturnValue ExitAction“Exit!“ExitAction Parameter(“ReturnMsg“),通过Action参数来传递数据,3种调用Action的方法,Action1的脚本如下: 调用Action2,输入参数为 “

24、Hello!”,把输出参数值写到ReturnMessage1变量 RunAction “Action2“,0,“hello“,ReturnMessage1Msgbox ReturnMessage1 调用Action2,输入参数为 “ Hello!”,通过Parameter方法读取输出参数值 RunAction “Action2“, oneIteration,“Hello!“ReturnMessage2= Parameter(“Action2“,“ReturnMsg“)Msgbox ReturnMessage2,通过Action参数来传递数据,如果被调用的Action使用了ExitAction来

25、退出Action并返回ReturnValue,则可以使用下面的方式来获取Return Value的值 注意OutPut Parameters与Return Value的区别 ReturnMessage3=RunAction(“Action2“,0,“Hello!“)Msgbox ReturnMessage3,顶级参数,顶级参数作用 支持QTP与外部对象进行参数的传递,如QC,或一些外部的驱动程序。 顶级参数设置 Files -Settings - test settings - Parameters -设置顶级参数,VBS调用QTP脚本,Dim qtApp Declare the Applic

26、ation object variable Dim pDefColl Declare a Parameter Definitions collection Dim pDef Declare a ParameterDefinition object Dim rtParams Declare a Parameters collection Dim rtParam Declare a Parameter object Dim cnt, Indx As Integer Set qtApp = CreateObject(“QuickTest.Application“) Create the Applic

27、ation object qtApp.Launch Start QuickTest qtApp.Visible = True Make the QuickTest application visible qtApp.Open “D:Test“,VBS调用QTP脚本, Retrieve the parameters collection defined for the test. Set pDefColl = qtApp.Test.ParameterDefinitions cnt = pDefColl.Count Indx = 1 Display the names and values of

28、each of the parameters in the collection. While Indx = cnt Set pDef = pDefColl.Item(Indx) MsgBox “Param name: “ Description: “ _& pDef.Description & “Default value: “ & pDef.DefaultValue Indx = Indx + 1 Wend,VBS调用QTP脚本,Set rtParams = pDefColl.GetParameters() Retrieve the Parameters collection define

29、d for the test. Set rtParam = rtParams.Item(“InParam1“) Retrieve a specific parameter. rtParam.Value = “Hello“ Change the parameter value. qtApp.Test.Run , True, rtParams Run the test with changed parameters. MsgBox rtParams.Item(“OutParam1“).Value Display the value of an output parameter after the

30、test runs. Set qtApp = Nothing Set pDefColl = Nothing Set pDef = Nothing Set rtParams = Nothing Set rtParam = Nothing,通过QTP数据表来共享数据,通过QTP数据表(Data Table)来共享数据 在Action1中设置参数值,Action1的脚本如下: 获取共享数据表 Set Sheet = DataTable.GetSheet(2) 查找参数列 Set para1=Sheet.GetParameter(“co1“) Set para2=Sheet.GetParameter(

31、“co2“),通过QTP数据表来共享数据,设置参数值Para1.Value=“Hello“ Para2.Value=“World!“ 调用Action2,Action2将使用前面设置的参数值 RunAction “Action2“,oneIteration,通过QTP数据表来共享数据,在Action2中读取参数值,Action2的脚本如下: 获取共享数据表 Set Sheet = DataTable.GetSheet(1) 读取参数值 Set para1=Sheet.Getparameter(1) Set para2=Sheet.Getparameter(2) 使用参数值 Msgbox Para1&“ “&Para2,作业,题目:1、通过VBS调用QTP脚本,要求: VBS将用户名“jojo”传入QTP,并驱动Flight4a登录。登录成功后将顶级输出参数值 “true”(布尔值)传出,并以提示信息的方式显示出来。 传值过程:外部VBS文件 -QTP顶级输入参数-Action输入参数-驱动login - Action输出参数-QTP顶级输出参数- VBS文件2、Action1调用Action2,将“您 好!”两个字作为两个字符串传给Action2 。要求通过QTP自带DataTable进行传参。,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医学治疗 > 基础医学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报