fsweicaixia 发表于 2013-8-21 16:52:51

QTP自动化测试技术领航

本帖最后由 fsweicaixia 于 2013-8-21 16:56 编辑

QTP自动化测试技术领航 第476页 脚本,有一句不明
testobjectname = obj.GetToProperty("testObjName")
testObjName是从何而来,是参数PropertyName吗?
紧急问题

'*******************************************************************
'脚本目的:实际值预期值相比较
'创建日期:2013.08.21~ 2013.08.21
'创 建 人:Anna
'描述:函数整理
'*******************************************************************
'@Description Auto Log Generator
'PropertyName obj属性
'ExpectedValue 实际值
Function ValidateProperty(obj,PropertyName,ExpectedValue)

      IfCstr(obj.GetROProperty(PropertyName)) = Cstr(ExpectedValue) Then
                '成功
                On Error Resume Next
                testobjectname = obj.GetToProperty("testObjName")
                HReport ExpectedValue,obj.GetROProperty(PropertyName),True,"check" + testobjectname + "<" + PropertyName + ">property"
                on error goto 0
                ValidateProperty = True
                Exit function
      Else
                '失败
                On Error Resume Next
                testobjectname = obj.GetToProperty("testObjName")
                HReport ExpectedValue,obj.GetROProperty(PropertyName),False,"check " + testobjectname + "<" + PropertyName + ">property"
                on error goto 0
                ValidateProperty = False
                Exit function
      End If

End Function

feiyunkai 发表于 2013-8-22 15:08:11

本帖最后由 feiyunkai 于 2013-8-22 15:31 编辑

obj.GetToProperty("testObjName")应该是obj.GetToProperty(PropertyName)

个人对该函数的看法:
1、函数中两个Exit function冗余:
原因:ValidateProperty赋值语句执行完成后,该函数已经执行完成,会自动退出函数,后面加Exit function多余)
2、on error goto 0
原因:on error goto 0 的作用是关闭错误处理,而ValidateProperty函数中on error goto 0 后面执行一句赋值语句后整个Function就执行完成,函数执行完成后会自动关闭本函数中的错误处理,所以多余
3、On error resume next冗余且位置不正确:
原因:On error resume next放在If语句上方可以起到相同作用,且能捕获if语句中条件的异常信息。
4、On error resume next未起到应有的作用:
原因:当函数遇到异常时,应该将错误描述(err.description)打印到日志中,方便问题定位
5、obj.GetROProperty(PropertyName)应该先赋值后比较
原因:上面函数中比较时获取一次属性值,打印报告又获取一次,影响效率,所以应先保存属性值
6、日志中没必要打印TO属性
原因:TO中属性是对象被添加到对象库中时的属性,与运行时属性可能会不同,当前函数中只需要打印期望值和实际值就可以了,打印TO属性没有意义。
7、建议:未判断需要获取属性的对象是否存在,若对象不存在则后面的比较将失去意义,所以建议先判断对象是否存在
以下是修改后的函数(日志打印函数未写,以Print代替)
Function ValidateProperty(obj,PropertyName,ExpectedValue)
    On Error Resume Next
      'Exist后可以根据需要设置超时时间,若不设置则为QTP默认超时时间
                If obj.Exist Then
                        ActualValue=Cstr(obj.GetROProperty(PropertyName))
                              If   ActualValue= Cstr(ExpectedValue) Then
                                        ValidateProperty = True
                              Else
                                        ValidateProperty = False
                              End If
                else
                '调用日志打印函数
                        print "对象不存在"
                End If
                '判断代码执行过程中是否有错,有错则打印日志,方便问题定位
                If err.number<>0 Then
                        '调用日志打印函数
                        print "属性比较出错,错误描述为:【"& err.description &"】"
                else
                        If ValidateProperty=TrueThen
                              '调用日志打印函数
                              print "对象属性校验成功,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
                        elseif                                 
                              '调用日志打印函数
                              print "对象属性校验失败,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
                        End If
                End If
End Function

zzxxbb112 发表于 2013-8-22 17:23:06

楼上的朋友意见非常好,非常感谢,第6条你误会了,testobjname不是普通的to属性,而是对象库中对象的关键字名称,是不会随着对象变的。这个在查错是非常有用的。呵呵。

feiyunkai 发表于 2013-8-23 12:15:36

回复 3# zzxxbb112


刚才试了下obj.GetToProperty("testObjName")是获取对象库中object properties中的name属性值,又学了一招,谢谢:D

fsweicaixia 发表于 2013-8-23 16:58:36

回复 2# feiyunkai


    非常感谢,献出您宝贵的时间解释此问题,万分感谢!

黑羽祭 发表于 2013-8-27 13:00:29

知识贴~不错~

huangyaoyan 发表于 2013-9-2 10:28:32

收益了,感谢

tangyl 发表于 2013-9-3 12:20:23

:victory:

fsweicaixia 发表于 2013-9-14 13:45:45

testobjname 关于这个隐藏对象获取的值什么值,GetTOProperty, GetROProperty三者能否详细解释解释

fsweicaixia 发表于 2013-9-14 13:53:53

整理了一下脚本

Function ValidateProperty(obj,PropertyName,ExpectedValue)
        On Error Resume Next
        'Exist后可以根据需要设置超时时间,若不设置则为QTP默认超时时间

        If obj.Exist Then
                ActualValue = Cstr(obj.GetROProperty(PropertyName))

                If   ActualValue = Cstr(ExpectedValue) Then
                        ValidateProperty = True
                Else
                        ValidateProperty = False
                End If

        else
                '调用日志打印函数
                print "对象不存在"
        End If

        '判断代码执行过程中是否有错,有错则打印日志,方便问题定位

        If err.number <> 0 Then
                '调用日志打印函数
                print "属性比较出错,错误描述为:【" & err.description & "】"
        else

                If ValidateProperty = TrueThen
                        '调用日志打印函数
                        print "对象属性校验成功,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
                elseif
                        '调用日志打印函数
                        print "对象属性校验失败,期望值为 :【" & ExpectedValue & "】 实际值为:【" & ActualValue & "】"
                End If

        End If

End Function
页: [1]
查看完整版本: QTP自动化测试技术领航