QTP脚本高手帮看看如何更简化,谢谢
'========================================================================='脚本功能:功能自动化测试脚本
'测试对象:XXXX 被测版本:V1.5
'编写日期:2010-5-20 编写人:XXX
'修改日期: 2010-5-26 修改人:XXX
'备注:目前脚本覆盖的功能有限,需要后继深入开发
'========================================================================
Option explicit '只能显式的定义变量
On Error Resume Next '遇到系统错误继续执行脚本
executefile "D:\qtp_control.VBS" '如果移植代码到其他机器运行 需要将对象库同此文件一起拷贝路径与此代码相同,或使用环境变量进行配置
Dim intRuntimes,objDialog,objSystemdia,strText ,strChecked,objSystemdia_1,stra,objarray(),wshshell,strreg(3)'定义测试过程中所需要的变量
Dimfso, fso_1,objqtpwin,objFile ' 文件系统操作相关变量
Dim rega,regb,regc '正则表达式相关变量
DimobjDescr,objChild,Counter '收集对象的相关变量
DimobjCollection,Counter_1 '收集对象属性集合的相关变量
DimintDevnumber,strDevValue '设备列表相关变量
Set wshshell=createobject("wscript.shell") '创建WSH相关对象
Set fso=createobject("scripting.filesystemobject") '创建文件系统对象
Set fso_1=fso.CreateTextFile("d:\注册表测试结果.txt") '此处需要修改为更改后的程序可执行文件的绝对路径
'data table 的相关操作
'===================将常用对象赋值给变量,用变量代替============
Set objDialog=Dialog("xxxxx")
Set objSystemdia_1=objDialog
Set objSystemdia=objDialog.Dialog("XXXXX")
'==================================================================
SystemUtil.Run "C:\Program Files\xxxx","xxx","","xxx" '程序运行命令:如果程序的安装路径改变了,
If Dialog("xxxxx").WinComboBox("设备列表:").GetItemsCount=0 Then '判断设备列表中设备数
callQTP_Small()
Function Count_int()
Dim intCount
intCount=0
Call QTP_Big()
'exittestiteration '用于推出当前测试脚本的执行
For intRuntimes=2 to 6 step 2
If intRuntimes=4 Then
objDialog.WinButton("在线升级").Click
objDialog.WinButton("在线升级").WaitProperty"visible","true",10000
objDialog.WinButton("系统选项").Click
Set objDescr=Description.Create() '创建description对象,作为对象的属性集合
objDescr("Class Name").value="WinCheckBox"
Set objChild=dialog("xxxxx").Dialog("系统选项").ChildObjects(objDescr)'返回符合属性集合的对象
If objChild.Count=2 Then '判断对象个数是否与预期一致
reporter.ReportEvent micPass,"复选框个数预期相符", "共有复选框"& objChild.Count &"个"
else
reporter.ReportEvent micFail, "复选框个数与预期不符","预期复选框2个"&vbcrlf&"实际复选框个数"& objChild.Count &"个"
End If
ForCounter=0 to objChild.Count-1
objChild(Counter).set "OFF"
Next
Set objCollection=dialog("xxxxx").Dialog("系统选项").WinCheckBox("XXXXX").GetTOProperties '获得此对象的描述属性
ForCounter_1=0 to objCollection.count-1
reporter.ReportEvent micPass,"此对象属性"&(Counter_1+1),"属性名:"& objCollection( Counter_1).name&vbcrlf&"属性值:"& objCollection( Counter_1).value '想测试报告中输出每一个描述属性的名字和值
Next
wait 3
Set objCollection=nothing
Set objChild=nothing '释放与变量所引用的对象相关联的内存和系统资源
Set objDescr=nothing
If objSystemdia.WinCheckBox("XXX").Exist Then '判断”XXXXX“复选框是否存在
strChecked=objSystemdia.WinCheckBox("XXXXX").GetROProperty("checked")'”XXXXX“复选框的checked值赋值给变量
IfstrChecked="OFF" Then '判断”XXXXX“复选框是否被选中
objSystemdia.WinCheckBox("XXXX").Set"ON"
End If
else
intCount=intCount+1
end if
If objSystemdia.WinCheckBox("XXXX").Exist then ' 判断此窗口是否存在
objSystemdia.WinCheckBox("XXXX").Set "ON"
else
intCount=intCount+1
end if
objSystemdia.WinButton("确定").Click
end if
If intRuntimes=2Then
If objDialog.WinButton("系统选项").Check(CheckPoint("系统选项_2"))then
wait 3
With dialog("xxxxx")
.WinButton("系统选项").Click
End With
else
msgbox "系统选项文本内容不正确",48,"系统提示"
End If
strText= objSystemdia.WinCheckBox("XXXX").GetROProperty("text")
[ 本帖最后由 wangxin1618 于 2010-7-9 17:24 编辑 ]
后继脚本
If strText="XXXXX" Then '=====假定一个其他的预期结果与运行时的程序进行比较,此做法目的为验证脚本中的计数器是否正常计数=====objSystemdia.WinCheckBox("XXXXX").Set "OFF"
else
Reporter.ReportEvent micFail, "文本错误", "此处文本与实际不符"&vbcrlf&"预期文本为:XXXXX"
intCount=intCount+1
ReDim Preserve objarray(intCount-1)
objarray(intCount-1)=objSystemdia.WinCheckBox("XXXXX").GetROProperty("text") '将出错对象的对象名赋值给变量
End If
objSystemdia.WinButton("确定").Click
objDialog.WinButton("系统选项").Click
If objSystemdia.WinCheckBox("XXXX").Exist then
strChecked=objSystemdia.WinCheckBox("XXXXX").GetROProperty("checked") '获得运行时对象的属性值
IfstrChecked="OFF" Then
objSystemdia.WinCheckBox("XXXXX").Set "ON"
end if
End If
objSystemdia.WinButton("确定").Click
End If
IfintRuntimes=6 Then
If objDialog.WinButton("在线升级").Exist and objDialog.WinButton("系统选项").Existthen '判断“在线升级“和”系统选项“按钮是否存在
objDialog.WinButton("在线升级").Click
objDialog.WinButton("系统选项").Click
objSystemdia.WinCheckBox("XXXXX").Set"ON"
If objSystemdia.WinCheckBox("XXXXX").CheckProperty("checked","ON")Then
objSystemdia.WinButton("确定").Click
else
msgbox "复选框没有被选中",48,"错误提示"
End If
end if
End If
Next
objDialog.WinButton("关闭").Click
Count_int=intCount '函数返回值
End Function
strreg(0)=wshshell.RegRead("XXXXXXX") ' 提取注册表键值信息
strreg(1)=wshshell.RegRead("XXXXXXXX")
strreg(2)=wshshell.RegRead("XXXXXX")
strreg(3)=wshshell.RegRead("XXXXXX")
regb="XXXXXXX"'正则表达式模板
Setrega=new Regexp
rega.Pattern=regb
rega.IgnoreCase=True
rega.Global=True
regc= rega.test(strreg(1))
If regc Then
reporter.ReportEvent micPass,"注册表格式","注册表键值符合正则表达式格式要求"
else
reporter.ReportEvent micFail,"注册表格式出错","注册表格式与预期格式不符,请检查"
End If
if strreg(3) ="XXXX"and strreg(2)=123and strreg(1)="XXXXXXl" and strreg(0)="XXXXXXXl"Then
'msgbox "被测注册表键值:"&vbcrlf&vbcrlf& join(strreg,vbcrlf&vbcrlf),64,"系统提示"
fso_1.Write("注册表键值与预期一致为:"&vbcrlf&vbcrlf&join(strreg,vbcrlf&vbcrlf)&vbcrlf&vbcrlf&"读取时间:"&now)
fso_1.Close
else
fso_1.Write("===注册表键值与预期不符==="&vbcrlf&vbcrlf&"实际注册表键值:"&vbcrlf&vbcrlf&join(strreg,vbcrlf&vbcrlf)&vbcrlf&vbcrlf&"读取时间:"&now)
fso_1.Close
Reporter.ReportEvent micFail, "注册表出错", "注册表键值与实际不符"
End If
If objSystemdia_1 is objDialog Then
Dim intCount
intCount=Count_int()
If intCount =0 Then 'intCount为计数器变量
'msgbox "本次测试结果:程序运行符合预期要求",64,"-系统提示-"
wshshell.Popup"本次测试结果:程序运行符合预期要求",3,"-系统提示-"
else
'msgbox "★出现缺陷次数是:"&"("&intCount&")"&"次★"&vbcrlf&vbcrlf&"出错对象:"&vbcrlf&vbcrlf&join( objarray,vbcrlf&vbcrlf)&vbcrlf&vbcrlf&"★请分析测试报告查找错误★",48,"-程序出现缺陷-"
wshshell.Popup"★出现缺陷次数是:"&"("&intCount&")"&"次★"&vbcrlf&vbcrlf&"出错对象:"&vbcrlf&vbcrlf&join( objarray,vbcrlf&vbcrlf)&vbcrlf&vbcrlf&"★请分析测试报告查找错误★",3,"-程序出现缺陷-"
End If '▲输出出错对象的基本属性:名称
End If
wshshell.Run "d:\注册表测试结果.txt"
else
set objFile=fso.CreateTextFile("d:\dev_list.txt")
ForintDevnumber=0 to (Dialog("xxxxx").WinComboBox("设备列表:").GetItemsCount-1)
strDevValue=Dialog("xxxxx").WinComboBox("设备列表:").GetItem(intDevnumber)
objFile.Write(strDevValue&vbcrlf)
Next
Dialog("xxxxx").Close
objFile.Close
wshshell.Run "d:\dev_list.txt"
end if
Setfso_1=nothing
Setwshshell=nothing
SetobjDialog=nothing '释放与变量所引用的对象相关联的内存和系统资源
setobjSystemdia=nothing
SetobjSystemdia_1=nothing
Setfso=nothing
Set objFile=nothing
简化就看自己的提炼了
大致看了脚本,很多可以提炼公共方法什么的,至于具体逻辑只有楼主自己知道了。 基本是挺简化的了,一般能简化到避免冗余就可以了,格式清晰啊什么的,在编写脚本的时候多用用WITH也是件简化的事情
页:
[1]