练习1.Flight4a
  要求:
    a.录制Flight4a登录+退出业务流程
    b.使用自定义检查结合Exist属性验证登录是否成功
    c.为用户名实现参数化
      用户名
      Jack 正确
      Rose 正确
      123 错误
      mercury 正确
Test14001_Flight4a_SystemUtil对象

'阻止鼠标和键盘输入
SystemUtil.BlockInput

''启动计算器程序
'SystemUtil.Run "C:\WINDOWS\system32\calc.exe"
''1、关闭计算器程序
''SystemUtil.CloseProcessByName "calc.exe"
'SystemUtil.CloseProcessByWndTitle "计算器"
''启动两位数加法器
'SystemUtil.Run "D:\两位数加法器V2.exe"
''2、关闭两位数加法器
''SystemUtil.CloseProcessByName "两位数加法器V2.exe"
'SystemUtil.CloseProcessByWndTitle "测试技术"
''3、关闭任务管理器
''SystemUtil.CloseProcessByName "taskmgr.exe"
''Test14002_SystemUtil对象


'4、启动Mtours系统
SystemUtil.Run "iexplore.exe","http://localhost:8080/mtours/servlet/WelcomeServlet"
Dim a,b,c,d
a=10
b=20
c=a+b
'msgbox c
d=b-a
'解锁鼠标和键盘输入
SystemUtil.UnblockInput

  DataTable("列名","表单名")

 

一、SystemUtil对象
  System:系统
  Util:工具


  1、CloseDescendantProcesses方法
    Close:关闭
    Descendant:后代,子代
    Processes:进程
    (1)作用:结束由QTP启动的所有进程,无论是自动启动还是手动启动的被测系统进程都会被关闭,包括QTP的测试结果报告
    (2)语法:SystemUtil.CloseDescendantProcesses
    (3)注意:没有参数、没有返回值


  2、CloseProcessByName方法
    (1)作用:结束指定名称的进程
    (2)语法:
      SystemUtil.CloseProcessByName "进程名称"
      SystemUtil.CloseProcessByName "flight4a.exe"
    (3)说明:进程名称在电脑任务管理器中查看

 

  3、CloseProcessByWndTitle方法
    (1)作用:关闭指定标题的窗口的进程
    (2)语法:
      SystemUtil.CloseProcessByWndTitle "窗口标题"
    (3)说明:窗口标题在任务管理其任务列中查看

 

  4、Run方法
    (1)作用:运行一个应用程序,一般用于启动被测系统
    (2)语法:
      a.启动windows程序
        SystemUtil.Run "程序的启动地址"
        SystemUtil.Run "D:\两位数加法器.exe"
      b.启动web程序
        SystemUtil.Run "浏览器","URL地址"
        SystemUtil.Run "iexplore.exe","http://localhost:8080/Mtours"

 

  5、运行代码时防止干扰
    (1)语法:
      SystemUtil.BlockInput 阻止鼠标和键盘输入
      SystemUtil.UnBlockInput 解锁鼠标和键盘输入
    (2)注意:
      不能再代码中有Inputbox、msgbox、死循环语句


二、Function方法、函数
  wait GetRoProperty Set Select
  登录


  1、Function是VBS提供的自定义函数,根据需求把需要的步骤、功能封装到一个Function中,需要使用这些步骤或功能时,调用Function就可以实现


  2、应用场景
    a.复用代码
    b.结构化代码
      需求1:测试Flight4a购票功能
        业务流程:登录->购票->关闭系统
      需求2:测试Flight4a打开订单功能
        业务路程:登录->购票->打开订单->关闭

      需求1:测试Flight4a登录功能
        操作步骤:

          1、打开系统
          2、输入用户名(参数化)
          3、输入密码(参数化)
          4、点击登录
          5、关闭
        数据分析:

          有效数据,无效数据
          有效数据->结果:登录成功
          无效数据->提示错误信息
          数据1:abc -> 标记:小于4位
          数据2: 123 ->标记:小于4位
          数据3:*#$ ->标记:小于4位
          数据4:jack->标记:正确

        Function 检查1(小于4位)

        End Function
        Function 检查2(正确)

        End Function 

      Test14002_无参无返回值_Function案例

'F11
myfun
myfun()  '建议在调用时加上括号
Call myfun
Call myfun()

Function myfun()
	Dim uname
	uname=Inputbox("请输入您的姓名:")
	msgbox uname&",欢迎学习QTP!"
End Function


  3、Function的特点:不调用不执行,调用时才执行


  4、不带参数也没有返回值(相当于去银行取钱不带卡,没有密码,也不需要把钱取回来)
    例子:去银行取钱
      Function getMoney()
        取钱
      End Function
    (1)定义:
      Function 函数名称()
        函数体
      End Function
    (2)Function函数的调用方式:
      函数名称
      函数名称() 建议使用该方式调用
      Call 函数名称
      Call 函数名称()
      练习2:两位数加法器
        要求:
          a.录制两位数加法器的打开系统+加法+退出业务流程
          b.把打开系统、加法、退出分别封装在3个Function中
          c.实现打开系统1次、加法2次、退出1次
      Test14003_无参无返回值_两位数加法器

'打开系统
openA()
'加法
myadd()
'加法
myadd()
'退出
myclose()

'1、封装打开被测系统的代码为一个Function
Function openA()
	SystemUtil.Run "D:\两位数加法器V2.exe","","D:\","open"
End Function
'2、封装加法的代码为一个Function
Function myadd()
	VbWindow("Form1").VbEdit("Text1").Set "10"
	VbWindow("Form1").VbEdit("Text2").Set "20"
	VbWindow("Form1").VbButton("计算(J)").Click
	VbWindow("Form1").VbButton("重置(C)").Click
End Function
'3、封装退出的代码为一个Function
Function myclose()
	VbWindow("Form1").VbButton("退出(E)").Click
	VbWindow("Form1").Dialog("退出提示").WinButton("确定").Click
End Function

      练习3:Flight4a
        要求:
          a.录制Flight4a登录+购票+打开5号订单+退出业务流程
          b.把代码分别封装在4个Function中
          c.实现登录->打开5号订单->购票->打开5号订单->退出


  5、带参数无返回值的Function(相当于去银行取钱,带上卡,有密码,不需要把钱拿回来)
    (1)应用场景
      a.多次调用Function时,每次执行函数体需要使用不同的数据
      b.把相似的多段代码封装为一个Function时,需要传入一个标记,标记函数体代码执行哪个分支
        Test14004_有参无返回值_Function案例

'myadd 1,2,30
'myadd "10","20","40"
Dim m
m=200
myadd m,90,m+100

Function myadd(num1,num2,num3)
	msgbox num1+num2+num3
End Function

    (2)定义:
      Function 函数名称(形参1,形参2,......)
        函数体
      End Function
      定义时注意:
        a.形参可以有0个和多个
        b.所有的形参需要在函数中使用
        c.形参不需要使用Dim定义
    (3)调用:
      函数名称 实参1,实参2,......
      调用时注意:
        a.传入的实参数据格式和顺序必须和形参一致
        b.不要随意给参数加括号
        c.实参可以由变量和表达式提供数据
          Test14005_有参无返回值_两位数加法器

'打开系统
openA()
'加法
myadd 39,50'  39+50
'加法
myadd 99,-10           '99+(-10)
'退出
myclose()

'1、封装打开被测系统的代码为一个Function
Function openA()
	SystemUtil.Run "D:\两位数加法器V2.exe","","D:\","open"
End Function
'2、封装加法的代码为一个Function
'功能:实现两位加法计算
'参数:第一数、第二个数
'返回值:无
Function myadd(num1,num2)
	VbWindow("Form1").VbEdit("Text1").Set num1
	VbWindow("Form1").VbEdit("Text2").Set num2
	VbWindow("Form1").VbButton("计算(J)").Click
	VbWindow("Form1").VbButton("重置(C)").Click
End Function
'3、封装退出的代码为一个Function
Function myclose()
	VbWindow("Form1").VbButton("退出(E)").Click
	VbWindow("Form1").Dialog("退出提示").WinButton("确定").Click
End Function

          把练习3进行修改
        d.实现登录->打开5号订单->购票->打开15号订单->退出

 

  6、有参数有返回值的Function(相当于去银行取钱,拿着卡,有密码,把钱取回来)
    Test14006_有参有返回值_Function案例

Dim result
'result=sum(10,20)
result=sum(99,-40)
msgbox result

Function sum(num1,num2)
  sum=num1+num2
End Function

    (1)应用场景:函数体中的数据或者结果需要在调用函数的位置使用,将数据或者结果返回给调用方
      如:购票Function生成的订单号,需要返回,提供给打开订单Function使用
    (2)定义:
      Function 函数名称(形参1,形参2,......)
        函数体
        函数名称=返回值
      End Function
    (3)调用:
      变量=函数名称(实参1,实参2,......)
      无返回值:wait 5
      有返回值:GetRoProperty("text")
      练习4:Flight4a
        要求:
          a.录制Flight4a的登录+购票+打开订单+退出业务流程
          b.把代码封装在4个Function中
          c.把购票Function返回一个订单号,打开订单时传入购票Function返回的订单号
          d.为购票Function传入一个参数是顾客姓名
          e.实现登录->购票->退出->登录->打开订单->退出
      Test14007_有参有返回值_Flight4a

'登录
login()
'购票
No=buy("Rose")
'退出
logOut()
'登录
login()
'打开订单
open No
'退出
logOut()


'1、登录Function
'功能:登录系统
'参数:无
'返回值:无
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 "5a66f92bec1ae518f4798f2fa2ab424dbc5bd891"
	Dialog("Login").WinButton("OK").Click
	wait 8
End Function

'2、购票Function
'功能:购票
'参数:顾客姓名
'返回值:订单号
Function buy(cName)
	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").WinList("From").Select "20334   FRA   12:12 AM   LAX   07:23 PM   AA     $112.20"
	Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
	Window("Flight Reservation").WinEdit("Name:").Set cName
	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、打开订单Function
'功能:打开订单
'参数:订单号
'返回值:无
Function open(orderNo)
	Window("Flight Reservation").WinButton("Button_2").Click
	Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON"
	Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set orderNo
	Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click
End Function

'4、退出Function
'功能:退出系统
'参数:无
'返回值:无
Function logOut()
	Window("Flight Reservation").Close
End Function

      练习5:两位数加法器
        要求:
          a.录制两位数加法器加法+退出业务流程
          b.给加数实现随机参数化,使用自定义检查点检查计算结果是否正确,再退出系统
          c.将自定义检查点封装到一个Function中,把两个加数作为参数传入
            Function check(num1,num2)
              res=Text3.GetROProperty("text")
              ex=num1+num2
              if res=ex then
                相等
              else
                不相等

            End Function