51Testing软件测试论坛

标题: 急需QTP统计页面加载时间的脚本!!! [打印本页]

作者: zhengpeipei    时间: 2009-6-5 09:40
标题: 急需QTP统计页面加载时间的脚本!!!
急需QTP统计页面加载时间的脚本!!!
请高手指教下!!!
作者: blizzardlyk    时间: 2009-6-5 09:46
这个应该用性能测试工具更加精确吧?如果是在要用QTP的话,那么就在加载页面之前取个系统时间,在加载结束再取个时间.2者相减.存在的风险:
1,页面加载开始这个时间点是以什么为标志的?
2,页面加载结束这个时间又是以什么为标志的? 是否加载所有对象? 如果要去判断这些所有对象是否都存在的话,又需要消耗一部分时间.
3,用QTP获取的时间只能精确到秒,这个参考价值是不大的.
所以说,用QTP去获取时间这个性能指标是不太合理的.
作者: ls_721521    时间: 2009-6-5 09:47
在需要统计的脚本间加个事务就行了吧。。。
作者: liuhuiweihui    时间: 2009-6-5 09:50
有具体的脚本吗,我也需要。
作者: zhengpeipei    时间: 2009-6-5 09:54
各位有关于注册的QTP的脚本吗,是加强版的。
作者: zhengpeipei    时间: 2009-6-5 09:57
需要将各种情况都考虑到,如用户名错误,为空等。
作者: zhengpeipei    时间: 2009-6-5 09:58
哪位大虾指点一下啊?
作者: zhengpeipei    时间: 2009-6-5 10:20
从网上找到这个资料:
'在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,请高手指点一下。
作者: itisok    时间: 2009-6-5 10:40
上面的脚本是纯vbs脚本。
在qtp中运行的话,可以使用wait代替wscript.sleep
作者: xiaoyaoke    时间: 2009-6-5 10:49
关注下,个人人为在QTP下统计的应该是不准确的,以前做过相关的,后来自己考虑可能不准确就换了其它的方式做了
也说下,比较不智能:
在firefox下用firebug来统计
作者: itisok    时间: 2009-6-5 10:55
1,页面加载开始这个时间点是以什么为标志的?

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

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

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

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

#精确到毫秒没有问题吧

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

#只能说这种方式不太专业,会有误差。但不是完全不合理。
作者: shanxi    时间: 2009-6-5 11:03
标题: 回复 1# 的帖子
别用QTP去 计算页面加载时间, 虽然能在代码中计时统计得到

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

PS:唉,全是错别字。。。
作者: itisok    时间: 2009-6-5 11:40
标题: 回复 13# 的帖子
1.页面加载到底指什么?
readystate不是有0~4的不同状态么?那么计时也可以是不同状态间的计时啊。想统计哪种时间,看需求了。

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

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

另外,楼上有什么更好的方法测试精确的加载时间呢?
作者: xiaoyaoke    时间: 2009-6-5 11:42
标题: 回复 14# 的帖子
工具,专用工具,^_^

我之前测firefox时候有的firebug,IE上不知道了
可以找专用工具看看有没有第三方接口,然后调用一下
作者: zhengpeipei    时间: 2009-6-5 12:07
多谢各位的指点啊

作者: itisok    时间: 2009-6-5 12:12
标题: 回复 15# 的帖子
思路挺好的,不过还有些问题没想清楚:
1、firebug是基于firefox浏览器的,由于各浏览器提供事件都不一样,这个还无法通用。
2、工具是怎么实现的?怎么处理动态加载的问题?
作者: shanxi    时间: 2009-6-5 12:14
标题: 既然14# 已经解析地这么清晰了,那我推荐一个工具
AOL Pagetest 能够计入Ajax的加载时间。
http://sourceforge.net/projects/pagetest/

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

[ 本帖最后由 shanxi 于 2009-6-5 12:17 编辑 ]
作者: ziheng198688    时间: 2009-6-5 13:58
标题: 回复 8# 的帖子
楼主可以加上这句
Set wscript=CreateObject("Wscript.Shell")创建Wscript对象
作者: zhengpeipei    时间: 2009-6-5 15:06
谁能发个注册脚本啊
作者: shanxi    时间: 2009-6-5 15:32
标题: 回复 20# 的帖子
http://www.51testing.com/?uid-31621-action-viewspace-itemid-80418
作者: dreamever    时间: 2009-6-5 16:00
原帖由 shanxi 于 2009-6-5 15:32 发表
http://www.51testing.com/?uid-31621-action-viewspace-itemid-80418

突然发现这个博客的地址好熟悉……
作者: zhengpeipei    时间: 2009-6-5 16:23
没有人知道吗?
作者: dreamever    时间: 2009-6-6 09:01
原帖由 zhengpeipei 于 2009-6-5 16:23 发表
没有人知道吗?

大家不是已经讨论的很详细了吗?
作者: zhengpeipei    时间: 2009-6-11 14:02
一个网页上有JSP的脚本写的对象,QTP录制不下来,是否要安装Java插件呢?
作者: dreamever    时间: 2009-6-11 14:47
我今天刚发了个帖子,是一段关于统计页面加载时间的脚本,有注释有代码,都是现成的

[ 本帖最后由 dreamever 于 2009-6-11 15:23 编辑 ]
作者: lvguobin    时间: 2009-6-17 17:54
原帖由 zhengpeipei 于 2009-6-5 10:20 发表
从网上找到这个资料:
'在loadrunner脚本中,把要访问的url做参数化,变量名为SITEURL
'timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间
'可以使用各种方法查看result的内容
SITEURL = "www.ba ...

把wscript.sleep 1改成wait 1就可以了
作者: fishy    时间: 2009-6-24 14:52
http://www.51testing.com/?uid-31621-action-viewspace-itemid-80418
作者: ziheng198688    时间: 2009-6-24 17:19
StartTime=Time()
进入页面脚本
Browser().Page().Sync
EndTime=Time()
Duration=EndTime-StartTime
作者: wenti    时间: 2009-6-24 17:48
QTP 不是也可以加事物吗?
作者: deadhunter    时间: 2010-6-1 16:50
原帖由 zhengpeipei 于 2009-6-5 10:20 发表
从网上找到这个资料:
'在loadrunner脚本中,把要访问的url做参数化,变量名为SITEURL
'timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间
'可以使用各种方法查看result的内容
SITEURL = "www.ba ...



我拿百度做测试,在Navigate url后,打印readyState的值,有时是1,有时是3,因为每次都会缺少部分的时间,导致很难统计时间

请问有其它办法解决吗?
作者: deadhunter    时间: 2010-6-1 16:57
这脚本的迭代好像有问题,如果正常等于4就没有退出,是不是应该用do  loop来实现
作者: lix43420    时间: 2010-6-4 16:25
原帖由 shanxi 于 2009-6-5 12:14 发表
AOL Pagetest 能够计入Ajax的加载时间。
http://sourceforge.net/projects/pagetest/

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


性能测试也只是服务器响应时间,不能反映实际用户体验的时间,明显要少很多。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2