使用QTP统计页面加载时间

上一篇 / 下一篇  2008-04-20 16:26:53 / 个人分类:QTP&VBS

51Testing软件测试网wo5L(Rm'D)Qk2R-X

QTP是一款功能自动化测试工具,而页面加载时间或响应速度应该是性能测试的事情,其实QTP也可以实现对页面加载时间的统计功能。因为QTP使用 的是VBS脚本,VBS脚本的强大之处在于它可以调用任何windows的COM组件和对象。那么问题解决的思路就很简单了,就是我们要利用VBS获取 IE网页,并统计网页加载的时间。

$HO5T6j)~ ~$AI0

9W#lF5vz^8F)E0分析很简单,但是在实现上却有几个技术问题:一、如何使用VBS分析网页。我们知道网页技术是基于DOM模型的(也不知道这么说是不是准确),那么 只要我们能用VBS调用DOM下的document对象,那么我们就可以使用document的方法来实现我们的要求;二、如果能实现对DOM的调用,我 们如何统计页面加载的各个阶段的时间,通过查阅资料可以知道,在document中有一个readystate方法,该方法共有五个返回值,分别对应网页 初始化到网页加载完毕五个阶段,我们可以利用该方法实现我们的要求。51Testing软件测试网jB,B-D(]U

H$p8S1B GZU0实现的思路如下:51Testing软件测试网/No E#@g

HNP1Qe5le01、利用createobject创建一个IE的实例,以访问document对象;51Testing软件测试网 n1K1R ~ uT{/I`a

$^{EE&Tn.c02、利用document对象的readystate属性获取网页加载时各个阶段的时间,

!~0}@GL w.i0

{s#Q!g7v l [4T03、利用timer()实现对毫秒的统计。timer()函数的作用是统计从午夜时间到当前时间所过去的秒数,我们用两个timer值想减就可以得到两个时间点之间相隔的毫秒数。

H2s'|jxlL/k$m#DI051Testing软件测试网'voHOd5]

4、为了方便调用,将时间统计的代码封装成一个函数51Testing软件测试网*C1]9v$_/w q5\8qe

8a Jm%O{$w0最后代码如下:

y/|M)n p0
'在loadrunner脚本中,把要访问的url做参数化,变量名为SITEURL
T;qe1@Ot/e0'
timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间51Testing软件测试网:] h2H9k*Go
'
可以使用各种方法查看result的内容51Testing软件测试网&TC7@$U{ N P
SITEURL = "www.sina.com.cn"'设置要进行访问的URL
@&`o J^;q9GS1y T0
result = timeCount(SITEURL)'返回运行结果51Testing软件测试网,K8ur0k)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}Q8u0
timer_start = timer()'获取当前时间的毫秒数51Testing软件测试网BC,`9@&| r5C
'
a = dom.ReadyState'获取当前IE的状态值,将使用该状态值判断IE的当前状态51Testing软件测试网J%I-dK:ZE
dom.visible = True '设置IE可见
+DYtJh0
While dom.busy or (dom.readyState<>4)'当IE处于BUSY状态或者加载未完成时(readystate不等于4)时,根据IE的状态统计时间,每毫秒统计一次
3q3WW0HW'KZ0
wscrīpt.sleep 1 '时间间隔1毫秒,如果时间间隔比较长的话,很有可能会取不到状态值51Testing软件测试网-C,C9ng;|C6[M
Select Case dom.readystate '判断dom.readystate的值
oHb"W%Q0

8{|d\%L }FFj0
Case 0 'IE未初始化,其实在该方法,readystate=0无意义,因为循环至少是从1开始的.51Testing软件测试网#e'zY0cJG
time0 = Now()51Testing软件测试网ax+k9Ux"x3u3@
timer0 
= timer()
^ ma Y X:LAe&z @0
.PG-_Ye8a`)dx:\ {fc3T0
Case 1 '"正在发送请求"
nEd#R5O/Z&g0
time1 = Now()
l;`p9D} Uy0timer1 
= timer()
-Q/U8sV4\S-w3j!FMc051Testing软件测试网+c~1MJOy
Case 2 '"请求已经发送完成"
Y(R&a&P/uIO0E9S[w*M0
time2 = Now()51Testing软件测试网 rGt/]1W{S^h/c
timer2 
= timer()51Testing软件测试网%M;e~ ?D%Qek

pj_'Q0_0
Case 3 '"可以接收到部分响应数据"
|2T/i,W;Z0
time3 = Now()
L c,f#h:~4_Ank0timer3 
= timer()51Testing软件测试网5Y#k%Cg7j
51Testing软件测试网` v3o[)z
Case 4 '"页面加载完成"
N-^5Je| `r'^*v H0
time4 = Now()51Testing软件测试网5mw xd(c7\&i
timer4 
= timer()51Testing软件测试网U$n$j!zW P'GR

4oPT:c.w/R K&f,QC0
End select51Testing软件测试网z%s;HM Y J*{L-G x p
wend51Testing软件测试网(O!e Ky E
time_end 
= Now() '统计结束时间
];n x3n,z)v0'
MsgBox "开始时间是:" & time1 & ";结束时间是"&time2
Nu?\ PZ0

8k7Q#w Nf6yx Xp5u0timeCount 
= "统计开始时间:"&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)&""51Testing软件测试网g)`\"a%u
End Function 
c&`y#p] B4h c0
])B9XMy.b']a.t"L0

L)o/b/c(T+_p0代码中的SITEURL就是我们要进行测试的页面.

k J ~*C;E0

6]gpS0Xj0这段代码虽然不长,但是却花了我整整4个小时的时间。一开始碰到的难题就是不知道VBS如何去调用document方法,在网上查了无数资料,大多 是讲如何在HTML代码中进行调用,很少说到如何使用标准VBS去调用,其实到最后才明白,VBS调用访问document无非就是这样的一句代码:51Testing软件测试网O EJB1O~ I

Set dom = CreateObject("InternetExplorer.Application")
51Testing软件测试网}(\^4zi(`!y

虽然简单,但是却花了我一个小时才明白。51Testing软件测试网%?9IlM%e:V

51Testing软件测试网T3]/c G-e1gB

通过这样的一段代码时间,我现在清楚了两件事,第一:VBS作为脚本语言,它的强大之处在于它调用windows的COM能力,而VBS本身并没有什么复杂的技术和体系。第二:QTP永远只是一款工具,它能做什么取决于我们如何去使用。

/Il{V:hgPF0

TAG: QTP vbs 网页加载 时间统计

引用 删除 deadhunter   /   2010-06-28 09:44:45
是的,我运行后也出现负数的情况,是不是readystate属性的问题?
引用 删除 lyydaisy   /   2010-03-29 22:15:17
我在运行过程中,存在结果是负数的情况,估计是有越界吧,而且每次运行完成之后要先将脚本关掉,才能再次使用,这个我猜是因为有什么东西没有释放吧,也不知道猜的对不对,麻烦帮我解释一下。谢谢
测火燎原--态度决定质量 引用 删除 ppent   /   2008-04-21 11:07:29
方法不错,收藏
引用 删除 juicy1231   /   2008-04-20 22:47:21
谢谢分享哦
 

评分:0

我来说两句

Open Toolbar