Test15001_两位数加法器
Option Explicit Dim num1,num2,result,ex 'result 实际结果 = 被测系统结果输入框中的值 'ex 预期结果 = num1 + num2 num1=RandomNumber(-99,99) num2=RandomNumber(-99,99) VbWindow("Form1").VbEdit("Text1").Set Cstr(num1) VbWindow("Form1").VbEdit("Text2").Set Cstr(num2) VbWindow("Form1").VbButton("计算(J)").Click '被测系统在执行计算后,才显示计算结果 '所以在计算步骤后,使用GetROProperty获取结果 check num1,num2 Function check(n1,n2) ex=n1+n2 result=VbWindow("Form1").VbEdit("Text3").GetROProperty("text") ' 对比实际值与预期值是否一致 If Cint(result)=Cint(ex) Then Reporter.ReportEvent micPass,"验证计算结果","一致!" else Reporter.ReportEvent micFail,"验证计算结果","不一致!" End If End Function VbWindow("Form1").VbButton("重置(C)").Click VbWindow("Form1").VbButton("退出(E)").Click VbWindow("Form1").Dialog("退出提示").WinButton("确定").Click
一、Function函数、方法
1、无参无返回值
Function 函数名称()
End Function
函数名称()
2、有参无返回值
Function 函数名称(参数1,参数2,......)
End Function
函数名称 参数1,参数2,......
3、有参有返回值
Function 函数名称(参数1,参数2,......)
函数名称=返回值
End Function
变量=函数名称(参数1,参数2,......)
4、无参有返回值
Function 函数名称()
函数名称=返回值
End Function
变量=函数名称()
Test15002_无参有返回值_Function案例
'功能:计算 '参数:无 '返回值:计算结果 Function sum() Dim num1,num2 num1=Cint(Inputbox("请输入第一个数:")) num2=Cint(Inputbox("请输入第二个数:")) sum=num1+num2 End Function msgbox sum()
(1)定义:
Function 函数名称()
函数体
函数名称=值
End Function
(2)调用:
变量=函数名称()
练习1:Flight4a
要求:
a.录制Flight4a的登录+购票+退出业务流程
b.把代码分别封装在3个Function
login
buy
logout
c.实现代码执行登录->购票->购票->退出
d.使用自定义检查点验证第二次购票的订单号比第一次大1
e.使用for循环实现5次订票,验证每次订票都比上一次订票的订单号大1
Function buy()
buy=order No.GetROProperty("text")
End Function
Test15003_无参有返回值_购票
Dim first,seconde 'first 保存第一次购票返回的订单号 'seconde 保存第二次购票返回的订单号 login() 'first=buy() '第一次购票 68 'seconde=buy() '第二次购票 69 -1 '使用for循环购票5次票,调用buy() 5次 'buy()=1 'buy()=2 'buy()=3 'buy()=4 'buy()=5 '订单号(1,2,3,4,5) Dim orderNo(4) '下标从0开始 Dim i For i= 0 to 4 orderNo(i)=buy() If i>0 Then '第1次返回的订单号 第2次返回的订单号 '数组前一个值 数组后一个值 If Cint(orderNo(i-1)+1)=Cint(orderNo(i)) Then Reporter.ReportEvent micPass,"验证订单号","第二次比第一次大1" else Reporter.ReportEvent micFail,"验证订单号","不大1" End If End If Next logout() 'If Cint(first)=Cint(seconde)-1 Then ' Reporter.ReportEvent micPass,"验证订单号","第二次比第一次大1" 'else ' Reporter.ReportEvent micFail,"验证订单号","不大1" 'End If '1、login '功能:登录 '参数:无 '返回值:无 Function login() SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app\","open" Dialog("Login").WinEdit("Agent Name:").Set "jack" Dialog("Login").WinEdit("Password:").SetSecure "5a67eb6c4f97c3ac86d7559af33f4c12473bb2cc" Dialog("Login").WinButton("OK").Click wait 8 End Function '2、buy '功能:购票 '参数:无 '返回值:插入订单后生成的订单号 Function buy() Window("Flight Reservation").ActiveX("MaskEdBox").Type "111119" Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt" Window("Flight Reservation").WinComboBox("Fly To:").Select "Los Angeles" Window("Flight Reservation").WinButton("FLIGHT").Click Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click Window("Flight Reservation").WinEdit("Name:").Set "jack" Window("Flight Reservation").WinButton("Insert Order").Click wait 6 buy=Window("Flight Reservation").WinEdit("Order No:").GetROProperty("text") Window("Flight Reservation").WinButton("Button").Click End Function '3、logout '功能:退出 '参数:无 '返回值:无 Function logout() Window("Flight Reservation").Close End Function
练习2:Flight4a
要求:
a.录制Flight4a登录+购票+退出业务流程
b.订票输入过期的日期再选择FlyFrom,使用自定义检查点验证提示信息
c.将自定义检查点封装在Function中,无参无返回值
d.保证脚本每天都能运行通过,所以检查点的提示信息日期部分应该是动态
Test15004_Function练习_验证提示信息
SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app\","open" Dialog("Login").WinEdit("Agent Name:").Set "Jack" Dialog("Login").WinEdit("Password:").SetSecure "5a6801062077f18cc5eae0605507ee0b8497972e" Dialog("Login").WinButton("OK").Click Window("Flight Reservation").ActiveX("MaskEdBox").Type "111117" Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver" checkInfo() Window("Flight Reservation").Dialog("Flight Reservations").WinButton("确定").Click Window("Flight Reservation").Close '功能:获取提示信息Function '参数:无 '返回值:提示信息 Function getInfo() '获取当前日期 01/24/18 月/日/年 'msgbox date '今天的日期 'msgbox year(date) '年 'msgbox month(date) '月 'msgbox day(date) '日 Dim y,m,d y=year(date) '2018 m=month(date) '1 d=day(date) '24 y=mid(y,3) '18 If Cint(m)<10 Then m="0"&m '01 End If If Cint(d)<10 Then d="0"&d '02 End If ' 把日期返回给Function函数getInfo getInfo="Valid flight dates are after "&m&"/"&d&"/"&y&"" msgbox mydate End Function '自定义检查点验证提示信息 '参数:无 '返回值:无 Function checkInfo() Dim ac,ex ' ac:实际结果 ' ex:预期结果 ex=getInfo() ac=Window("Flight Reservation").Dialog("Flight Reservations").Static("Valid flight dates are").GetROProperty("text") If Cstr(ac)=Cstr(ex) Then Reporter.ReportEvent micPass,"验证日期提示信息","正确" Else Reporter.ReportEvent micFail,"验证日期提示信息","失败" End If End Function
date
'获取当前日期 01/24/18 月/日/年
'msgbox date '今天的日期
'msgbox year(date) '年
'msgbox month(date) '月
'msgbox day(date) '日
Dim y,m,d
y=year(date) '2018
m=month(date) '1
d=day(date) '24
y=mid(y,3) '18
If Cint(m)<10 Then
m="0"&m '01
End If
If Cint(d)<10 Then
d="0"&d '02
End If
mydate=""&m&"/"&d&"/"&y&""
msgbox mydate
5、变量的作用域
主代码
Function 1()
a
End Function
Function 2(m)
b
End Function
(1)在Function的函数体内定义的变量,作用域就在该Function内部,其他Function或主代码无此变量,不能使用
(2)Function的形参变量作用域就在该Function内部,在其他Function或主代码都无此变量,不能使用
(3)在Action内部主代码中定义的变量,作用域在该Action内部,包括Action内的所有Function都可以使用,在其他Action中无此变量,不能使用
6、Action间的传参
Action:购票生成订单号
Action:打开订单需要订单号
(1)通过DataTable传参
a.在前一个Action中向DataTable表写入数据
语法:DataTable("列名","表名")=值
b.在后一个Action中读取DataTable表的数据
语法:变量=DataTable("列名","表名")
(2)通过环境变量传参
a.在前一个Action中向环境变量写入数据
语法:Environment("参数名")=值
b.在后一个Action中读取环境变量中的数据
语法:变量=Environment("参数名")
(3)使用Action传参
Action1 ->属性->Parameter->out
Parameter("out")="mercury"
Action2->属性->Parameter->in
->Call Properties->Parameter->in=out
msgbox Parameter("in")
a.在第一个Action为Parameter变量赋值
语法:Parameter("变量")=值
b.在第二个Action读取Parameter的值
语法:变量=Parameter("变量名")
练习3:Flight4a
要求:
a.录制Flight4a登录+购票+打开订单+退出业务流程
b.分别使用3种传参的方式,实现打开订单时使用购票生成的订单号
Test15005_Flight4a_Action传参订单号
登录Action() SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app\","open" Dialog("Login").WinEdit("Agent Name:").Set "jack" Dialog("Login").WinEdit("Password:").SetSecure "5a6836099d2780743417f9b7340f765e2c108fb1" Dialog("Login").WinButton("OK").Click wait 6 购票Action() Window("Flight Reservation").ActiveX("MaskEdBox").Click 0,5 Window("Flight Reservation").ActiveX("MaskEdBox").Type "111119" Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver" Window("Flight Reservation").WinComboBox("Fly To:").Select "London" Window("Flight Reservation").WinButton("FLIGHT").Click Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "20264 DEN 12:12 AM LON 07:23 PM AA $112.20" Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click Window("Flight Reservation").WinEdit("Name:").Set "jack" Window("Flight Reservation").WinButton("Insert Order").Click wait 6 Dim orderNo '获取订票后生成的订单号 orderNo=Window("Flight Reservation").WinEdit("Order No:").GetROProperty("text") ''1、DataTable传参 'DataTable("订单号","购票")=orderNo ''2、Environment传参 'Environment("No")=orderNo '3、Parameter传参 Parameter("out")=orderNo 打开订单Action() Window("Flight Reservation").WinButton("Button").Click Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON" Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set Parameter("in")'Environment("No")'DataTable("订单号","购票") Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click 退出Action() Window("Flight Reservation").Close
二、DataTable表高级使用
Test15006_两位数加法器_ImportSheet
'DataTable.ImportSheet "文件名称","文件中的sheet名称","DataTable表单名称" DataTable.ImportSheet "C:\data.xls","计算","Action1" SystemUtil.Run "D:\两位数加法器V2.exe","","D:\","open" VbWindow("Form1").VbEdit("Text1").Set DataTable("num1","Action1") VbWindow("Form1").VbEdit("Text2").Set DataTable("num2","Action1") VbWindow("Form1").VbButton("计算(J)").Click '获取当前DataTable运行行,也就是当前读取DataTable '的那行数据 Dim row '表 获取当前行 row=DataTable.GetSheet("Action1").GetCurrentRow desktop.CaptureBitmap "D:\计算结果"&row&".png",True VbWindow("Form1").VbButton("重置(C)").Click VbWindow("Form1").VbButton("退出(E)").Click VbWindow("Form1").Dialog("退出提示").WinButton("确定").Click
1、DataTable表的ImportSheet方法
(1)作用:导入Excel指定表单中的数据,只在运行时导入
(2)语法:DataTable.ImportSheet "文件名.xls","Excel表单名","DataTable表单名"
如:把C盘下data.xls中的计算sheet页导入到DataTable的Action1表单中
DataTable.ImportSheet "C:\data.xls","计算","Action1"
(3)注意:
a.QTP10.0只支持.xls后缀的文件
b.在Excel中准备数据时,第一行将作为DataTable中的列名
c.运行代码时一定要关闭Excel文档
d.Excel的单元格不能合并
e.只有运行时才会导入数据,运行后在Runtime DataTable中可以查看
2、GetCurrentRow方法
Get:获取
Current:当前
Row:行
desktop.CaptureBatimap "D:\结果3.png",True
1
2
3
(1)作用:获取当前读取DataTable表中数据的行号
(2)语法:变量=DataTable.GetSheet("表单名").GetCurrentRow
(3)返回值:当前行号,迭代行的行号
3、SetCurrentRow方法
Test15007_Flight4a_SetCurrentRow
For i=5 to 10 Window("Flight Reservation").WinButton("Button").Click Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON" Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set Cstr(i) Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click ' 设置当前行,运行第一次把数据输出到第1行,以此类推 DataTable.GetSheet("Action1").SetCurrentRow i Window("Flight Reservation").WinEdit("Name:").Output CheckPoint("Name:") Next
(1)作用:设定指定表单的当前操作行为指定行
(2)语法:DataTable.GetSheet("表单名").SetCurrentRow 行号
(3)参数:Integer,只能是数字
(4)返回值:无
练习4:Flight4a
要求:录制Flight4a登录+购票+退出业务流程
a.使用For循环实现购票3次
b.为订票日期、起飞城市、到达城市实现参数化,参数来自city.xls文档
c.使用输出值输出购票后的订单号
d.为每次购票后的界面进行截图,要求不能覆盖
Test1508_Flight4a_DataTable高级使用
'导入city.xls Excel表中data表单的数据到Action1中 DataTable.ImportSheet "C:\city.xls","data","Action1" SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app\","open" Dialog("Login").WinEdit("Agent Name:").Set "jack" Dialog("Login").WinEdit("Password:").SetSecure "5a68540da623868b5a48ca453f037e8a1d2ef4e6" Dialog("Login").WinButton("OK").Click wait 6 '循环购票3次 For i=1 to 3 Window("Flight Reservation").ActiveX("MaskEdBox").Type DataTable("订票日期","Action1") Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable("起飞城市","Action1") Window("Flight Reservation").WinComboBox("Fly To:").Select DataTable("到达城市","Action1") Window("Flight Reservation").WinButton("FLIGHT").Click Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click Window("Flight Reservation").WinEdit("Name:").Set "jack" Window("Flight Reservation").WinButton("Insert Order").Click wait 8 '设置DataTable的当前行,让每次输出的订单号 ' 保存到不同的行里 DataTable.GetSheet("Action1").SetCurrentRow i Window("Flight Reservation").WinEdit("Order No:").Output CheckPoint("Order No:") '把购票成功的界面进行截图 Dim row row=DataTable.GetSheet("Action1").GetCurrentRow desktop.CaptureBitmap "D:\购票成功"&row&".png",True Window("Flight Reservation").WinButton("Button").Click Next Window("Flight Reservation").Close