转自http://www.51testing.com/?uid-31621-action-viewspace-itemid-80418
QTP 是一款功能自动化测试 工具,而页面加载时间或响应速度应该是性能测试 的事情,其实QTP也可以实现对页面加载时间的统计功能。因为QTP使用 的是VBS脚本,VBS脚本的强大之处在于它可以调用任何windows的COM组件和对象。那么问题解决的思路就很简单了,就是我们要利用VBS获取 IE网页,并统计网页加载 的时间。
技术 问题:一、如何使用VBS分析网页。我们知道网页技术是基于DOM模型的(也不知道这么说是不是准确),那么 只要我们能用VBS调用DOM下的document对象,那么我们就可以使用document的方法来实现我们的要求;二、如果能实现对DOM的调用,我 们如何统计页面加载的各个阶段的时间,通过查阅资料可以知道,在document中有一个readystate方法,该方法共有五个返回值,分别对应网页 初始化到网页加载完毕五个阶段,我们可以利用该方法实现我们的要求。
分析很简单,但是在实现上却有几个
实现的思路如下:
1、利用createobject创建一个IE的实例,以访问document对象;
2、利用document对象的readystate属性获取网页加载时各个阶段的时间;
' timeCount方法返回一个字符串,字符串的内容是统计各个阶段发生的时间
' 可以使用各种方法查看result的内容
SITEURL = " www.sina.com.cn " ' 设置要进行访问的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的状态统计时间,每毫秒统计一次
wscrīpt.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
代码中的SITEURL就是我们要进行测试的页面.
这段代码虽然不长,但是却花了我整整4个小时的时间。一开始碰到的难题就是不知道VBS如何去调用document方法,在网上查了无数资料,大多 是讲如何在HTML代码中进行调用,很少说到如何使用标准VBS去调用,其实到最后才明白,VBS调用访问document无非就是这样的一句代码:
虽然简单,但是却花了我一个小时才明白。
通过这样的一段代码时间,我现在清楚了两件事,第一:VBS作为脚本语言,它的强大之处在于它调用windows的COM能力,而VBS本身并没有什么复杂的技术和体系。第二:QTP永远只是一款工具,它能做什么取决于我们如何去使用。