|
我的QTP总结写了一段时间了,因为上班不能上网,直到现在才发出来。以后兄弟姐妹们也许还能用到,供大家参考,有写得不对的地方,欢迎指点。
录制原理:对可识别的对象,在录制过程中,使用识别原理将GUI加载到对象库,并在脚本里对对象进行各种动作触发。对不可识别的对象,有analog recording和low level recording(QTP) 两种录制方式。适合GUI软件的自动化测试。识别对象原理即反编译原理,根据GUI对象的属性的识别对象。回放原理:将对象库里的对象属性和实际被测软件的对象一一匹配,完成相应的动作触发或校验。
录制脚本注意事项:
⑴尽量使用工具来启动程序;
⑵录制状态下,杜决多余操作;
⑶关闭应用程序;
⑷录制最后要STOP。
录制过程中可能出现的问题:
1.无法识别对象
解决方案:如果是没有相应程序的插件,而导致的对象不能识别,请填加相应的插件.如果是少量的几个控件不能识别的话,可以用合适类型的虚拟对象来代替.当然还有两个万能的办法,就是更改录制模式使用LOW-LEVEL Recording 和 Analog Recording来录制.
2.无法生成脚本,但对象可以识别
解决方案:把对象手工添加到对象库中去,然后手工来生成需要的脚本
回放过程中可能出现的问题:
1.找不到测试对象
解决方案:把该对象填加到对象库中去
2.测试对象与运行时对象不匹配
解决方案:如果是因为脚本的上下文依赖而导致的对象不能识别,请加相应的延时.如果是由于对象属性发生了变化而导致的对象不能识别,请修改相应的属性.
3.无法执行脚本操作
解决方案:请检查脚本程序
QTP要点:
录制脚本。一种方式:Record and run test on any open Windows-based application,这种方式需要在脚本里添加命令Systemutil.Run “要打开的被测软件名”。另一种方式:Record and run on these applications(open on session start),这种方式下如果回放时与录制时打开的应用程序不一致,回放就会报错。
往对象库里增加对象。第一种方式:录制时的对象自动加到对象库里。第二种方式:点击对象库按钮或打开对象库菜单,点击“Add objects”增加所需的对象。第三种方式:在快照里右击所需对象,选择增加对象菜单。
关于验证点:
1、在脚本里加标准验证点、数据库验证点,可以边录制边加验证点,或先录制后加验证点。添加方式可以选择菜单,也可以在快照里右击所需验证对象。
2、标准和数据库验证点,预期数据可以常量或参数方式表示。参数分Data table、Environment、Random Number三种。
3、输出值可以输出到Data Table和Environment中,可将输出值与预期值比较来验证。
4、用GetRoProperty捕获界面元素输出值,赋给变量,再进行比较验证。这种方式比QTP的输出值方式更方便使用。
关于输入内容
输入内容可以用常量也可以用参数方式。录制后可在关键字视图或专家视图中更改。
关于输出日志
1、判断验证结果输出日志:reporter.ReportEvent micfail,"检查×××","×××失败"。事件状态有:micPass、micFail、micDone、micWarning。
2、可以输出日志到Excel文件,Txt文件,方法在下文中。
关于Data Table
1、可用Data Table驱动循环,需在Action的Action Call Properties菜单中选择运行条目数。
2、Data Table可以导入已有文件,例
a = environment("TestDir")&"\mydata.xls"
datatable.import(a)
3、Data Table的Sheet可以用命令方式增加字段,例
datatable.LocalSheet.AddParameter "testlog",""
4、获取Data Table的Sheet中记录数目用来循环,如
c=datatable.LocalSheet.GetRowCount
移动Sheet中记录指针,如datatable.LocalSheet.SetNextRow
5、导出Data Table,如
datatable.ExportSheet environment("TestDir")&"\final.xls",2(2为第二张Sheet表,第一张Sheet表是Global。)
exitaction(结束Action)
关于SetToProperty的用法
相同类型对象,只有“Text”属性(或其它)不同,用SetToProperty对一个对象的属性根据不同情况进行不同设置,常在循环或选择分支语句中使用。
例 For i=0 to 9
Window("计算器").WinButton("number").SetTOProperty "text",cstr(i)
Window("计算器").WinButton("number").Click
Next
关于GetToProperties的用法
Set b = dialog("Login").WinEdit("winedit").GetTOProperties
PropsCount = b.Count
For i=0 to PropsCount-1
PropName = b(i).Name
PropValue = b(i).Value
msgbox PropName & "属性的值是 " & PropValue
Next
在一个脚本中插入多个Action
1、 多个Action并列结构:Insert Call to New Action―――选择At the end of the test
2、 多个Action嵌套结构:Insert Call to New Action―――选择After the current step,这种方式会在主Action里加入一行命令,如RunAction "OpenApp", oneIteration。
这种结构下,可以按级传递输入输出参数。脚本参数在Test Setting中设置,运行时输入,输出参数不可见,输出到QC等外部软件中去。主Action中Action Properties中添加输入输出参数,Action Call Properties中添加参数对应关系,再设置下一级Action的参数及对应关系。
输入输出参数的应用,例
Window("计算器").Type Parameter("number1")
Window("计算器").WinButton("+").Click
Window("计算器").Type Parameter("number2")
Window("计算器").WinButton("=").Click
parameter("sum")=window("计算器").WinEdit("Edit").GetROProperty("text")
3、 还可以插入一个Action的拷贝,或插入一个已存在Action。
描述性编程
Dim computer
set computer = description.Create()
computer("regexpwndtitle").value = "计算器"
computer("regexpwndclass").value = "SciCalc"
Dim seven
set seven =description.Create()
seven("text").value = "7"
seven("nativeclass").value = "Button"
window(computer).winbutton(seven).click
或
systemutil.Run "d:\gyj\calc.exe"
For i=0 to 9
window("regexpwndtitle:=计算器","regexpwndclass:=SciCalc").winbutton("text:="&cstr(i),"nativeclass:=Button").click
Next
关闭子窗体,可作为Action预处理
Option explicit
Dim loginwin,mainwin,child,i
Set loginwin=description.create()
loginwin("text").value = "Login"
Set child=desktop.ChildObjects(loginwin)
For i=1 to child.count
child(i-1).close
Next
Set mainwin=description.Create()
mainwin("text").value = "Flight Reservation"
Set child = desktop.ChildObjects(mainwin)
For i=1 to child.count
child(i-1).close
Next
Txt格式文件作为输入,输出日志到Txt格式文件
Const ForReading =1,ForWriting = 2
Dim fso,f,g,i
Set fso =CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("d:\gyj\login.txt",Forreading)
Set g= fso.OpenTextFile("d:\gyj\log.txt",Forwriting,true)
i=0
While f.atendofline<>true
systemutil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
Dim myArray
myArray = split(f.readline,",")
Dialog("Login").WinEdit("Agent Name:").Set myArray(0)
Dialog("Login").WinEdit("Password:").Set myArray(1)
Dialog("Login").WinButton("OK").Click
wait 3
window("Flight Reservation").Close
i=i+1
g.write "第"&i&"次登录成功"&vbcrlf
Wend
f.close
g.close
Set fso = nothing
Excel格式文件作为输入,并输出日志到另一Sheet
Dim res,cmd,sql
Set res=createobject("adodb.recordset")
Set cmd=createobject("adodb.command")
cmd.activeconnection="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight32.mdb;Persist Security Info=False"
cmd.CommandType=1
Dim xlapp,wkbook,wksheet,wklog
Dim i
Set xlapp = CreateObject("excel.application")
Set wkbook = xlapp.Workbooks.Open(environment("TestDir")&"\test.xls")
xlapp.visible = false
Set wksheet = wkbook.Worksheets("testdata")
Set wklog = wkbook.Worksheets("testlog")
For i=2 to 4
a = wksheet.Cells(i,1)
b = wksheet.Cells(i,2)
c = wksheet.Cells(i,3)
d = wksheet.Cells(i,4)
e = wksheet.Cells(i,5)
window("Flight Reservation").ActiveX("MaskEdBox").Type a
window("Flight Reservation").WinComboBox("Fly From:").Select b
window("Flight Reservation").WinComboBox("Fly To:").Select c
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
window("Flight Reservation").WinEdit("Name:").Set d
window("Flight Reservation").WinEdit("Tickets:").Set e
window("Flight Reservation").WinButton("Insert Order").Click
Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty "text", "Insert Done...", 10000
OrderNo = window("Flight Reservation").WinEdit("Order No:").GetROProperty("text")
sql="SELECT MAX(Order_Number) AS dbOrderNO FROM ORDERS"
cmd.CommandText=sql
Set res=cmd.Execute()
If trim(OrderNo) = trim(res("dbOrderNo")) Then
wklog.Cells(i,1) = res("dbOrderNo")
wklog.Cells(i,2) = "订单" &OrderNo &"创建成功"
else
wklog.Cells(i,1) = OrderNo
wklog.Cells(i,2) = "订单" &OrderNo &"创建失败"
end if
window("Flight Reservation").WinButton("Button_5").Click
Next
window("Flight Reservation").Close
wkbook.save
wkbook.close
xlapp.Quit
Set xlapp = Nothing
Set res=nothing
Set cmd.ActiveConnection = nothing
Set cmd = nothing
打开数据库函数
Function opendb(sql)
dbstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight32.mdb;Persist Security Info=False"
Set Cnn =CreateObject("ADODB.Connection")
Cnn.Open dbstr
Set res =CreateObject("ADODB.Recordset")
res.Open sql, Cnn,1,1
res.MoveFirst
arraylen=res.fields.count
ReDim myarray(res.RecordCount-1)
j=0
While not res.eof
myarray(j)=res.fields(0).value
For i=1 to arraylen-1
myarray(j)=myarray(j)&","&res.fields(i).value
Next
j=j+1
res.movenext
Wend
opendb = myarray
Set res = nothing
Set Cnn= nothing
End Function
虚拟对象技术 |
|