使用QTP统计页面加载时间(加载IE对象)

转自http://www.51testing.com/?uid-31621-action-viewspace-itemid-80418

 

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

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

51Testing软件测试网L u^]4Y0sk

实现的思路如下:51Testing软件测试网jh3GZy

51Testing软件测试网3g.B+y$`? w

1、利用createobject创建一个IE的实例,以访问document对象;

b'U~`q8tbI0 51Testing软件测试网+c!x9{?vZ.E$w6_

2、利用document对象的readystate属性获取网页加载时各个阶段的时间;

' 在loadrunner脚本中,把要访问的url做参数化,变量名为SITEURL 51Testing软件测试网'y p/z+wF3`
'
timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间
NF7R0xS&K`A0 '
可以使用各种方法查看result的内容 51Testing软件测试网)n$Z)@)NMNA
SITEURL  =   " www.sina.com.cn " ' 设置要进行访问的URL
"KqH|.])JqRv-t�C0
result  =  timeCount(SITEURL) ' 返回运行结果 51Testing软件测试网0B9w ^*a T?(JF s
MsgBox  result  ' 输出运行结果,在loadrunner中可以将该行注释掉
v2?[PE*_0

sw%| lb0
' 方法定义开始 51Testing软件测试网5K/z�X!qV'I(?
Public   Function  timeCount(url)51Testing软件测试网s*z?3J WB
Set  dom  =   CreateObject ( " InternetExplorer.Application " )   ' 创建一个IE的对象 51Testing软件测试网+JfJl/Z'@'D@5`
dom.Navigate(url)   ' 打开指定的URL 51Testing软件测试网s~?WE9l$E7`!S"X
time_start  =   Now () ' 获取统计开始时的时间 51Testing软件测试网pJ"uQG
timer_start  =   timer () ' 获取当前时间的毫秒数 51Testing软件测试网V4ygF#c7An C1e p
'
a = dom.ReadyState'获取当前IE的状态值,将使用该状态值判断IE的当前状态 51Testing软件测试网S,B*I.r6S&XR `H/h
dom.visible  =   True   ' 设置IE可见 51Testing软件测试网9q"H aQ6@I7jU
While  dom.busy  or  (dom.readyState <> 4 ) ' 当IE处于BUSY状态或者加载未完成时(readystate不等于4)时,根据IE的状态统计时间,每毫秒统计一次 51Testing软件测试网}G c&cd
wscrīpt.sleep  1   ' 时间间隔1毫秒,如果时间间隔比较长的话,很有可能会取不到状态值 51Testing软件测试网mc4nNW0o|2e
Select   Case  dom.readystate  ' 判断dom.readystate的值
iF mor#}0
51Testing软件测试网`"tg8p6O5y/S(d1H
Case   0   ' IE未初始化,其实在该方法,readystate=0无意义,因为循环至少是从1开始的. 51Testing软件测试网b6xY4L#`1EGa
time0  =   Now ()51Testing软件测试网G L![7p"x3Q9z
timer0 
=   timer ()
;}r!y[]1Do9w0
Z N(m1Z)o0
Case   1   ' "正在发送请求" 51Testing软件测试网J�ej{-z ~'w
time1  =   Now ()
s{j#G{0 timer1 
=   timer ()51Testing软件测试网Qy0B7{J7/3xTH
51Testing软件测试网lNr.}8Qgh iV
Case   2   ' "请求已经发送完成" 51Testing软件测试网Tf k"JUi
time2  =   Now ()51Testing软件测试网2Sc0nmXo
timer2 
=   timer ()
7v*E'w5u6J;G0
N0A ^w3P-W|0
Case   3   ' "可以接收到部分响应数据" 51Testing软件测试网 W,N?+^h#Jj*k
time3  =   Now ()51Testing软件测试网X.h'p8iGw-}
timer3 
=   timer ()51Testing软件测试网? _!fz-R)^q
51Testing软件测试网ZT$d*QA
Case   4   ' "页面加载完成" 51Testing软件测试网5{6sE*DA
time4  =   Now ()51Testing软件测试网)`*gJ I8ww,tQ@S;k
timer4 
=   timer ()51Testing软件测试网?#@Qh*af%wQ~9Uq7|

4{T+fV*sXE i w0
End   select
Q;y ]%yEP0
wend
'H},m#HAd0 time_end 
=   Now ()  ' 统计结束时间 51Testing软件测试网l]4Rs3E5Mq-x
'
MsgBox "开始时间是:" & time1 & ";结束时间是"&time2
x:M}%y`Lp0

;CN,d hr0 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) & " " 51Testing软件测试网,tW4v1slF1fr
End Function  
w/a PP$T0
YSyJPv,Q0

V c-B'By r]0 代码中的SITEURL就是我们要进行测试的页面.51Testing软件测试网:KX:/!~]:zb]

51Testing软件测试网M!]%GRCu4ROo5}

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

Set  dom  =   CreateObject ( " InternetExplorer.Application " )

-mBXr m]6{h0 虽然简单,但是却花了我一个小时才明白。51Testing软件测试网 WE1{e$}

51Testing软件测试网.`$x8Z3R;{/Z;{Go

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

$]5i2qA@tO5A0

你可能感兴趣的:(QTP,ie,软件测试,testing,timer,loadrunner,脚本)