51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8007|回复: 32
打印 上一主题 下一主题

[原创] 急需QTP统计页面加载时间的脚本!!!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-5 09:40:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
急需QTP统计页面加载时间的脚本!!!
请高手指教下!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-6-5 09:46:25 | 只看该作者
这个应该用性能测试工具更加精确吧?如果是在要用QTP的话,那么就在加载页面之前取个系统时间,在加载结束再取个时间.2者相减.存在的风险:
1,页面加载开始这个时间点是以什么为标志的?
2,页面加载结束这个时间又是以什么为标志的? 是否加载所有对象? 如果要去判断这些所有对象是否都存在的话,又需要消耗一部分时间.
3,用QTP获取的时间只能精确到秒,这个参考价值是不大的.
所以说,用QTP去获取时间这个性能指标是不太合理的.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-6-5 09:47:50 | 只看该作者
在需要统计的脚本间加个事务就行了吧。。。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-6-5 09:50:15 | 只看该作者
有具体的脚本吗,我也需要。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-6-5 09:54:23 | 只看该作者
各位有关于注册的QTP的脚本吗,是加强版的。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-6-5 09:57:38 | 只看该作者
需要将各种情况都考虑到,如用户名错误,为空等。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-6-5 09:58:51 | 只看该作者
哪位大虾指点一下啊?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2009-6-5 10:20:00 | 只看该作者
从网上找到这个资料:
'在loadrunner脚本中,把要访问的url做参数化,变量名为SITEURL
'timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间
'可以使用各种方法查看result的内容
SITEURL = "www.baidu.com"'设置要进行访问的URL
result = timeCount(SITEURL)'返回运行结果
MsgBox result '输出运行结果,在loadrunner中可以将该行注释掉
'方法定义开始
Public Function timeCount(url)
Set dom = CreateObject("InternetExplorer.Application")  '创建一个IE的对象
dom.Navigate(url)  '打开指定的URL
time_start = Now()'获取统计开始时的时间
timer_start = timer()'获取当前时间的毫秒数
'a = dom.ReadyState'获取当前IE的状态值,将使用该状态值判断IE的当前状态
dom.visible = True '设置IE可见
While dom.busy or (dom.readyState<>4)'当IE处于BUSY状态或者加载未完成时(readystate不等于4)时,根据IE的状态统计时间,每毫秒统计一次
   wscript.sleep 1 '时间间隔1毫秒,如果时间间隔比较长的话,很有可能会取不到状态值
Select Case dom.readystate '判断dom.readystate的值
Case 0 'IE未初始化,其实在该方法,readystate=0无意义,因为循环至少是从1开始的.
time0 = Now()
timer0 = timer()
Case 1 '"正在发送请求"
time1 = Now()
timer1 = timer()
Case 2 '"请求已经发送完成"
time2 = Now()
timer2 = timer()
Case 3 '"可以接收到部分响应数据"
time3 = Now()
timer3 = timer()
Case 4 '"页面加载完成"
time4 = Now()
timer4 = timer()
End select
wend
time_end = Now() '统计结束时间
'MsgBox "开始时间是:" & time1 & ";结束时间是"&time2
timeCount = "统计开始时间:"&start_time&vbcrlf&"time0:"&time0&vbcrlf&"time1:"&time1&vbcrlf&"time2:"&time2&vbcrlf&"time3:"&time3&vbcrlf&"time4:"&time4&vbcrlf&"完成IE的初始化并发送请求:"&(timer1-timer_start)&"秒"&vbcrlf&"发送完成并接受服务端部分响应数据:"&(timer3-timer1)&"秒"&vbcrlf&"100%接收并完成HTML内容解析:"&(timer4-timer3)&"秒"&vbcrlf& "总共花费:"&(timer4-timer_start)&"秒"
End Function

但回放时提示缺少对象wscript,请高手指点一下。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-6-5 10:40:36 | 只看该作者
上面的脚本是纯vbs脚本。
在qtp中运行的话,可以使用wait代替wscript.sleep
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-6-5 10:49:07 | 只看该作者
关注下,个人人为在QTP下统计的应该是不准确的,以前做过相关的,后来自己考虑可能不准确就换了其它的方式做了
也说下,比较不智能:
在firefox下用firebug来统计
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2009-6-5 10:55:18 | 只看该作者
1,页面加载开始这个时间点是以什么为标志的?

#可以在向浏览器发出navigate请求后计时

2,页面加载结束这个时间又是以什么为标志的? 是否加载所有对象? 如果要去判断这些所有对象是否都存在的话,又需要消耗一部分时间.

#对于网页加载,判断是否加载完成可以使用ie本身属性得到。如果ie认为加载完成了(包括了下载、渲染),我们就可以认为是真完成了。对于windows应用加载时间,我觉得通过判断界面上控件是否存在的方式,确实有控件识别时间消耗带来的误差。那么是否可以通过判断相应事件的触发或者其他非UI判断的工具来判断加载时间。

3,用QTP获取的时间只能精确到秒,这个参考价值是不大的.

#精确到毫秒没有问题吧

所以说,用QTP去获取时间这个性能指标是不太合理的.

#只能说这种方式不太专业,会有误差。但不是完全不合理。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2009-6-5 11:03:02 | 只看该作者

回复 1# 的帖子

别用QTP去 计算页面加载时间, 虽然能在代码中计时统计得到

但原理不很准确。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2009-6-5 11:15:47 | 只看该作者

回复 11# 的帖子 :跟你叫个真,呵呵

我对页面这块不太了解,说错了包涵
1.页面加载到底指什么?
如果是包括通讯+展示,那可以在navigate后面开始计时就OK了,但如果单纯的想统计展示,那navigate后开始计时就明显要冗余了通讯时间,因为navigate后面首先要进行构造http包然后发包,等待回包,然后处理,真正浏览器开始处理数据包才是展示的时间;
2.何为结束的标识?
网页加载,一般来说,真正耗费时间的可能是JS执行吧,而且现在展示技术不断发展,可能部分页面构造完成而部分页面还没有构造完成,所以判断某控件不太准确,而如果轮询判断浏览器状态。。。这个感觉时间冗余比较多吧
3.4一起说吧:
任何一种方式都有误差,不是看误差的绝对大小,而是看相对于初始值的相对大小,也许通过QTP来做只是多计算了点点时间而已,但这点点时间相对于初始值已经非常大非常大了,所以说这种方法不可取,而不是说它不可行

PS:唉,全是错别字。。。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-6-5 11:40:09 | 只看该作者

回复 13# 的帖子

1.页面加载到底指什么?
readystate不是有0~4的不同状态么?那么计时也可以是不同状态间的计时啊。想统计哪种时间,看需求了。

2.何为结束的标识?
通过判断浏览器状态统计加载时间,这个方法在使用ajax等技术页面上,肯定会有问题。这种页面浏览器的readystate也不准确,或者可能本来就会触发多个documentcomplete事件,那么你怎么判断呢?具体问题还得具体分析,但是这是一种方法,但不适合所有情况。

3.4
确实应该考虑误差相对于被测值的大小,不过我想要是页面瞬间就加载完了,也不会有人要测这个时间了。

另外,楼上有什么更好的方法测试精确的加载时间呢?
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2009-6-5 11:42:50 | 只看该作者

回复 14# 的帖子

工具,专用工具,^_^

我之前测firefox时候有的firebug,IE上不知道了
可以找专用工具看看有没有第三方接口,然后调用一下
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2009-6-5 12:07:47 | 只看该作者
多谢各位的指点啊
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-6-5 12:12:51 | 只看该作者

回复 15# 的帖子

思路挺好的,不过还有些问题没想清楚:
1、firebug是基于firefox浏览器的,由于各浏览器提供事件都不一样,这个还无法通用。
2、工具是怎么实现的?怎么处理动态加载的问题?
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-6-5 12:14:14 | 只看该作者

既然14# 已经解析地这么清晰了,那我推荐一个工具

AOL Pagetest 能够计入Ajax的加载时间。
http://sourceforge.net/projects/pagetest/

这已经属于性能测试范畴了

[ 本帖最后由 shanxi 于 2009-6-5 12:17 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-6-5 13:58:14 | 只看该作者

回复 8# 的帖子

楼主可以加上这句
Set wscript=CreateObject("Wscript.Shell")创建Wscript对象
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2009-6-5 15:06:51 | 只看该作者
谁能发个注册脚本啊
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 14:54 , Processed in 0.083579 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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