51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2100|回复: 3
打印 上一主题 下一主题

[原创] [翻译]The Fastest Way to Work with GUI Objects

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-2-12 21:02:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
尝试翻译一下,翻译不好的地方请大家多多见谅。
原文地址:http://www.advancedqtp.com/knowledge-base/articles/qtp-tricks4/the-fastest-way-for-working-with-gui-objects/

译文如下:

那么,什么是操作GUI对象最快速有效的方式?仁者见仁、智者见智 – 一些人拥护对象库(OR),而另一些人则强烈推荐描述性编程(DP)。有的人会将每个对象赋值给一个变量并使用,有的人会直接使用对象库中的对象,认为这才是最有效的方式。
        
实验
好的,我认为我们最好整理一下两种方式,并进行科学的(或多或少)实验:
1.        测试对象为Google首页搜索页面上的查询框。
2.        QTP被设置为Fast运行模式,智能识别被关闭。
3.        只有一个浏览器打开,并且对应网页只保证一个打开。
4.        测试环境:运行在VMWare Fusion 2.1上的虚机IE7,Windows XP SP3 ,1GB内存。测试实机为2.4GHz MacBook(共4GB内存)
5.        测试运行10次,取其平均值
6.        通过以下方式操作GUI对象:
a)        常规方式使用对象库(OR)
b)        直接使用描述性编程(DP)
c)        变量引用方式的OR(将OR对象赋值给一个变量,再使用此变量)
d)        变量引用方式的DP(类似c))
e)        运行时OR(使用对象库访问WebEdit运行时对象,并通过改变运行时属性的方式设值)
f)        运行时DP(类似e))
g)        运行时变量引用OR(使用对象库访问运行时对象,将其赋值给一个变量,再使用此变量)
h)        运行时变量引用DP(类似g))
7.        每个方法一个for循环连续输入50个数据。

我认为上面的方法已经很好的覆盖了所有主流操作GUI对象的方式。每个循环之前会加入时间戳,并与循环后的时间戳比较。

这里给出测试代码:
  1. Dim i
  2. Dim iTimer
  3. Dim oEdit

  4. '常规方式使用对象库
  5. iTimer = Timer
  6. For i = 0 to 50
  7. Browser("Google").Page("Google").WebEdit("q").Set i
  8. Next
  9. Print "Regular OR =" & (Timer - iTimer)

  10. '描述性编程
  11. iTimer = Timer
  12. For i = 0 to 50
  13. Browser("index:=0").Page("index:=0").WebEdit("name:=q").Set i
  14. Next
  15. Print "Descriptive Programming =" & (Timer - iTimer)

  16. '变量引用方式的OR
  17. iTimer = Timer
  18. Set oEdit = Browser("Google").Page("Google").WebEdit("q")
  19. For i = 0 to 50
  20. oEdit.Set i
  21. Next
  22. Print "OR via fixed reference =" & (Timer - iTimer)

  23. '变量引用方式的DP
  24. iTimer = Timer
  25. Set oEdit = Browser("index:=0").Page("index:=0").WebEdit("name:=q")
  26. For i = 0 to 50
  27. oEdit.Set i
  28. Next
  29. Print "Descriptive programming via fixed reference =" & (Timer - iTimer)

  30. '运行时OR
  31. iTimer = Timer
  32. For i = 0 to 50
  33. Browser("Google").Page("Google").WebEdit("q").Object.value = i
  34. Next
  35. Print "Runtime through OR =" & (Timer - iTimer)

  36. '运行时DP
  37. iTimer = Timer
  38. For i = 0 to 50
  39. Browser("index:=0").Page("index:=0").WebEdit("name:=q").Object.value= i
  40. Next
  41. Print "Runtime through Descriptive Programming =" & (Timer - iTimer)

  42. '运行时变量引用OR
  43. iTimer = Timer
  44. Set oEdit = Browser("Google").Page("Google").WebEdit("q").Object
  45. For i = 0 to 50
  46. oEdit.value = i
  47. Next
  48. Print "Runtime through OR fixed reference = " & Timer-iTimer

  49. '运行时变量引用DP
  50. iTimer = Timer
  51. Set oEdit = Browser("index:=0").Page("index:=0").WebEdit("name:=q").Object
  52. For i = 0 to 50
  53. oEdit.value = i
  54. Next
  55. Print "Runtime through DP fixed reference = " & Timer-iTimer
复制代码
更新:
Dani提供了一种不同的方式访问运行时对象,通过getElementById/Name方法:
  1. 'Runtime through the OR and GetElementById
  2. iTimer = Timer
  3. Set we = Browser("Google").Page("Google").Object.getElementById("id")
  4. For i = 0 to 50
  5. We.Value = i
  6. Next
  7. Print "Runtime through the OR and GetElementById" & Timer-iTimer

  8. 'Runtime through the OR and GetElementByName
  9. iTimer = Timer
  10. Set we = Browser("Google").Page("Google").Object.getElementByName("name")
  11. For i = 0 to 50
  12. We.Value = i
  13. Next
  14. Print "Runtime through the OR and GetElementByName" & Timer-iTimer
复制代码
结果
这里给出的是平均结果:
常规方式使用对象库(OR) = 5.59375

直接使用描述性编程(DP) = 6.375

变量引用方式的OR = 3.31253

变量引用方式的DP = 3.25122

运行时OR = 2.90625

运行时DP = 3.921875

运行时变量引用OR= 0.203125

运行时变量引用DP = 0.265625

更新: Runtime through GetElementById = 0.20122; and through GetElementByName = 0.21019

这个结果有点让人吃惊,至少对我来说。但是本质是一样的-运行时变量引用的方式是最有效的方式。

从结果看直接访问对象库比描述性编程要快(相差近一秒-个人而言,这非常让我震惊)。使用OR和DP访问WebEdit运行时对象的时候,这个差距被进一步拉大,已经超过1秒。然而使用中间变量时,两者的区别却微乎其微。

值得注意的是,使用运行时对象减少了近一半时间,接近使用变量索引方式下的性能。

最后的赢家,是运行时变量引用的方式。这并不奇怪,这种方式完全回避QTP GUI的对象匹配机制(包括一开始的变量赋值)。

我希望你能欣赏这篇文章,我希望能听到更多关于在QTP上执行脚本的性能和其他测试的主意(而不是QTP本身)。

[ 本帖最后由 asoqa 于 2009-2-12 21:07 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

4#
发表于 2009-2-13 16:44:25 | 只看该作者
已经读过这篇文章,在adavancedqtp网站。

LZ还可以翻译另外一篇对于应用Class和Function的速度,也很有意思的,可以更进一步了解OO编程。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-2-13 08:58:35 | 只看该作者
我觉得作者还研究少了快的原因,或者只叫猜测...
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2009-2-13 08:50:51 | 只看该作者
http://www.51testing.com/?174770 ... e_itemid_90151.html

【运行速度】对象库 与 描述性::yiwusuoyou::: ::yiwusuoyou:::
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-23 14:31 , Processed in 0.070550 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表