wangxin1618 发表于 2010-7-9 17:19:26

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 编辑 ]

wangxin1618 发表于 2010-7-9 17:20:18

后继脚本

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

JackieChan 发表于 2010-7-29 13:39:30

简化就看自己的提炼了

大致看了脚本,很多可以提炼公共方法什么的,至于具体逻辑只有楼主自己知道了。

yujie6832 发表于 2010-7-29 14:51:46

基本是挺简化的了,一般能简化到避免冗余就可以了,格式清晰啊什么的,在编写脚本的时候多用用WITH也是件简化的事情
页: [1]
查看完整版本: QTP脚本高手帮看看如何更简化,谢谢