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