上期我们讲到LoaRunner性能测试结果分析实践之导入外部数据,这期我们讲LoaRunner性能测试结果分析实践之使用HttpWatch分析响应时间。
使用HttpWatch分析响应时间
在前面详细的介绍了页面细分的技术,通过页面细分技术可以了解事务响应时间中每个页面所消耗的时间和每个页面的大小,但这些信息还不够全面,不能更好的帮助我们分析更细节的信息,所以此时可以借助一些抓包工具对事务响应过程中每个页面提交的请求信息进行详细的分析。本文主要介绍在性能测试过程中如何通过HttpWatch协助分析事务的响应时间。
HttpWatch是强大的网页数据分析工具,集成在Internet Explorer工具栏,主要功能有:网页摘要、Cookies管理、缓存管理、消息头发送/接受、字符查询,POST数据、目录管理功能和报告输出。HttpWatch是一款能够收集并显示深层信息的软件。它不用代理服务器或一些复杂的网络监控工具,能够在显示网页同时显示网页请求和回应的日志信息,甚至可以显示浏览器缓存和IE之间的交换信息,集成在Internet Explorer工具栏。
只需要选择相应的网站,软件就可以对网站与IE之间的需求回复的通讯情况进行分析并在同一界面显示其相应日志记录。每一个HTTP记录都可以详细的分析其Cookies、消息头、字符查询等信息。
支持HTTPS及分析报告输出为
XML、CSV等格式。
本文主要介绍HttpWatch的使用,在介绍HttpWatch之前先介绍一些HTTP的基础知识。
HTTP消息格式
当用户使用浏览器访问某个URL地址、提交表单数据时,浏览器会生成请求消息发送给服务器,服务器收到请求后,将生成的响应消息返回给浏览器。浏览器发出的请求信息和服务器返回的响应信息统称为HTTP消息。HTTP消息有着严格的格式。
一个完整的请求消息包括这几部分内容:一个请求行、若干消息头、以及实体内容,其中一些消息头和实体内容是可选的,消息头和实体内容之间使用空行隔开,下面是一个HTTP请求消息内容:
GET/ntes?_nacc=163mail&_nvid=7c0d1cf605598ecfe807584165c223de&_nvtm=0&_nvsf=0&_nvfi=0&_nlag=zh-cn&_nlmf=1348455172&_nres=1366x768&_nscd=24-bit&_nstm=0&_nurl=http%3A//email.163.com/&_ntit=%u7F51%u6613%u514D%u8D39%u90AE%u7BB1%20-%20%u4E2D%u56FD%u7B2C%u4E00%u5927%u7535%u5B50%u90AE%u4EF6%u670D%u52A1%u5546&_nref=&_nfla=&_nssn=arivnhuang@163.com&_nxkey=14554960.63862&_end1HTTP/1.1
Accept:image/png,image/*;q=0.8,*/*;q=0.5
Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7
Accept-Encoding:gzip,deflate
Accept-Language:zh-cn,zh;q=0.5
Connection:keep-alive
Cookie:_ntes_nnid=7c0d1cf605598ecfe807584165c223de,1348494032799;_ntes_nuid=7c0d1cf605598ecfe807584165c223de;P_INFO=arivnhuang@163.com|1348372940|0|mail163|00&99|gud&1348371848&mail163#gud&440300#10#0#0|135972&0;USERTRACK=27.38.158.211.1348371851089728;Province=020;City=0755;vjuids=-1d5af34df.139f686d0ab.0.19e9889ac3d0f8;vjlast=1348460794.1348460794.30;HotpopPrevious=1348454827
Hostanalytics.163.com
Keep-Alive:115
Referer:http://email.163.com/
User-Agent:Mozilla/5.0(WindowsNT5.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1
一个完整的响应消息包括一个状态行、若干消息头、以及实体内容。与请求消息一样,响应消息中的一些消息头和实体内容也是可选的,消息头和实体内容之间也要用空行隔开。下面是一个HTTP响应消息内容:
HTTP/1.1200OK
Cache-Control:must-revalidate,no-cache,private
Connection:keep-alive
Content-Length:43
Content-Type:image/gif
Date:Mon,24Sep201215:44:11GMT
Expires:Sat,1Jan200000:00:00GMT
Last-Modified:Sat,1Jan200000:00:00GMT
Pragma:no-cache
Server:nginx
X-Server-ID:x123y231
HTTP请求和HTTP响应消息头都是用于描述HTTP消息本身的信息,通常也把这种描述信息称为元信息,消息头相当于服务器和浏览器之间的暗号指令,主要实现HTTP客户机与服务器之间的条件请求和应答。
通常情况下消息头分为四类:信息头、请求头、响应头和实体头:
通用信息头:既能用于请求信息,也可以用于响应消息,但与被传输的实体内容没有关系,如Date、Pragma。
请求头:用于在请求消息中向服务器传递附加信息,主要包括客户机可以接受的数据类型、压缩方法、语言,以及客户计算机上保留的Cookie信息和发出该请求的超链接源地址等。
响应头:用于在响应消息中向客户端传递附加信息,包括服务程序的名称、要求客户端进行认证的方式、请求的资源已移动到的新地址等。
实体头:用做实体内容的元信息,描述了实体内容的属性,包括实体信息的类型、长度、压缩方法、最后一次修改的时间和数据的有效期等。
请求消息的请求行中包括三个部分内容:请求方式、资源路径、以及所使用的HTTP协议版本,各部分之间使用空格分隔,语法格式如下:
请求方式资源路径HTTP版本号<CRLF>
其中<CRLF>表示回车和换行两个字符的组合。
响应消息的状态行中包括三个部分的内容:HTTP协议的版本号、一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息,各部分内容之间使用空格分隔,语法格式如下:
HTTP版本号状态码原因叙述<CRLF>
Request Grid
安装好HTTPWatch之后,打开浏览器的工具菜单
选择HTTPWatch选项将HTTPWatch开启。
启动HTTPWatch之后,
单击HTTPWatch菜单区中的
【Record】按钮开始录制。
之后HTTPWatch可以捉到客户端向服务器发送的请求以及服务器返回的请求,并对这些数据进行分析。单击【Stop】按钮即停止录制。
首先介绍Request Grid的内容,如图所示。
Started:相对开始时间,是指接下来访问的URL相对于第一个URL被打开的时间,如http:
//mimg.127.net/index/lib/scripts/base.js
是在http://email.163.com/页面的0.352秒才执行的。
Time Chart:耗时比例图,即整个请求应答过程中各部分所花时间比例图。
Time:请求所消耗的时间。
Sent:提交该请求所发送的字节数。
Received:提交请求后服务器返回的字节数。
Method:提交请求的方法。
Result:请求处理的结果。
Type:服务器返回内容的类型。
URL:请求的URL地址。
在测试过程中主要关注:
Time、Received和Result三项的值,Time是请求的耗时,需要注意耗时大的请求,因为在整个业务响应时间过程中,耗时长的请求是最有可能需要调优的;
Received是返回的字节数,在测试过程中需要关注返回字节数较大的需求,因为返回的字节数较大,会影响整个请求的耗时,其也是调优需要重点关注的内容。
Result是指请求响应的状态,需要关注其响应状态为非200的值,请求响应状态只有200是正确的,其它的都是异常的,如果请求出现异常情况,说明业务很有可能操作失败,这样直接影响了事务的成功率。