使用QTP统计页面加载时间
上一篇 / 下一篇 2008-04-20 16:26:53 / 个人分类:QTP&VBS
QTP是一款功能自动化测试工具,而页面加载时间或响应速度应该是性能测试的事情,其实QTP也可以实现对页面加载时间的统计功能。因为QTP使用 的是VBS脚本,VBS脚本的强大之处在于它可以调用任何windows的COM组件和对象。那么问题解决的思路就很简单了,就是我们要利用VBS获取 IE网页,并统计网页加载的时间。
$HO5T6j)~~$AI09W#lF5vz^8F)E0分析很简单,但是在实现上却有几个技术问题:一、如何使用VBS分析网页。我们知道网页技术是基于DOM模型的(也不知道这么说是不是准确),那么 只要我们能用VBS调用DOM下的document对象,那么我们就可以使用document的方法来实现我们的要求;二、如果能实现对DOM的调用,我 们如何统计页面加载的各个阶段的时间,通过查阅资料可以知道,在document中有一个readystate方法,该方法共有五个返回值,分别对应网页 初始化到网页加载完毕五个阶段,我们可以利用该方法实现我们的要求。51Testing软件测试网jB,B-D(]U
H$p8S1B G ZU0实现的思路如下:51Testing软件测试网/No E#@g
HNP1Qe5le01、利用createobject创建一个IE的实例,以访问document对象;51Testing软件测试网n1K1R ~ uT{/I`a
$^{EE&Tn.c02、利用document对象的readystate属性获取网页加载时各个阶段的时间,
!~0}@GLw.i0{s#Q!g7v l [4T03、利用timer()实现对毫秒的统计。timer()函数的作用是统计从午夜时间到当前时间所过去的秒数,我们用两个timer值想减就可以得到两个时间点之间相隔的毫秒数。
H2s'|jxl L/k$m#D I051Testing软件测试网'voHOd5]4、为了方便调用,将时间统计的代码封装成一个函数51Testing软件测试网*C1]9v$_/w q5\8qe
8aJm%O{$w0最后代码如下:
y/|M)n p0T;qe1@Ot/e0'timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间51Testing软件测试网:] h2H9k*Go
'可以使用各种方法查看result的内容51Testing软件测试网&TC7@$U{ N P
SITEURL = "www.sina.com.cn"'设置要进行访问的URL
@&`oJ^;q9GS1yT0result = timeCount(SITEURL)'返回运行结果51Testing软件测试网,K8u r0k)s*Ng
MsgBox result '输出运行结果,在loadrunner中可以将该行注释掉51Testing软件测试网 WZM*[j*m9H3` X$Y
i8_+I\y%\.D)Z0'方法定义开始51Testing软件测试网wZ_cH o3Ad-k
Public Function timeCount(url)51Testing软件测试网#iZS&No7k[ l
Set dom = CreateObject("InternetExplorer.Application") '创建一个IE的对象51Testing软件测试网K.r[0rc2n|
dom.Navigate(url) '打开指定的URL51Testing软件测试网3Oeb(A]4`'{
time_start = Now()'获取统计开始时的时间
.\O2~#} Z}Q8u0timer_start = timer()'获取当前时间的毫秒数51Testing软件测试网BC,`9@&| r5C
'a = dom.ReadyState'获取当前IE的状态值,将使用该状态值判断IE的当前状态51Testing软件测试网J%I-dK:ZE
dom.visible = True '设置IE可见
+DYtJh0While dom.busy or (dom.readyState<>4)'当IE处于BUSY状态或者加载未完成时(readystate不等于4)时,根据IE的状态统计时间,每毫秒统计一次
3q3WW0HW'KZ0wscrīpt.sleep 1 '时间间隔1毫秒,如果时间间隔比较长的话,很有可能会取不到状态值51Testing软件测试网-C,C9ng;|C6[M
Select Case dom.readystate '判断dom.readystate的值
oHb"W%Q0
8{|d\%L}FFj0Case 0 'IE未初始化,其实在该方法,readystate=0无意义,因为循环至少是从1开始的.51Testing软件测试网#e'zY0c JG
time0 = Now()51Testing软件测试网ax+k9Ux"x3u3@
timer0 = timer()
^ ma Y X:LAe&z @0
.PG-_Ye8a`)dx:\ {fc3T0Case 1 '"正在发送请求"
nEd#R5O/Z&g0time1 = Now()
l;`p9D}Uy0timer1 = timer()
-Q/U8sV4\S-w3j!FMc051Testing软件测试网+c~1MJOy
Case 2 '"请求已经发送完成"
Y(R&a&P/uIO0E9S[w*M0time2 = Now()51Testing软件测试网rGt/]1W{S^h/c
timer2 = timer()51Testing软件测试网%M;e~ ?D%Qek