您的位置:首页 > 运维架构 > Apache

开源性能测试工具 - Apache ab介绍

2016-08-19 17:53 561 查看
版权声明:本文可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途。本人保留对本文的一切权利。如需转载,请在转载是保留此版权声明,并保证本文的完整性。也请转贴者理解创作的辛劳,尊重作者的劳动成果。作者:陈雷(Jackei)邮箱:jackeichan@gmail.comBlog:http://jackei.cnblogs.com
引子按照原定计划,今天开始研究JMeter,一天的时间看完了大半的UserManual,发现原来只要沉住气,学习效率还是蛮高的,而且大堆的英文文档也没有那么可怕^_^本来想顺便把文档翻译一下,不过后来想了想,看懂是一回事,全部翻译出来又是另外一回事了,工作量太大,而且这也不是我一开始要研究JMeter的本意。不如大家有兴趣一起研究的遇到问题再一起讨论吧。开源工具通常都是为了某个特定的目的而开发出来的,所以如果想找到一个开源的性能测试工具去与LoadRunner或者QALoad之类去比较,实在有些勉强。但是开源工具也有它自己的优势:小巧、轻便,在自己擅长的领域可以提供优秀的解决方案。所以,我们可以考虑准备一个自己的“开源测试工具箱”,平时利用空闲时间了解各种工具所适用的环境和目的,知识慢慢积累下来以后,就可以在遇到问题时顺手拈来,轻松化解^_^另外,如果8月份和9月份的空闲时间足够多,我想我会写一个系列文章来讲述在实际的开发和测试过程中引入开源性能测试工具的情况。如果有朋友感兴趣,希望大家可以一起研究和讨论。简介ab的全称是ApacheBench,是Apache附带的一个小工具,专门用于HTTPServer的benchmarktesting,可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。一个简单的例子/*在这个例子的一开始,我执行了这样一个命令ab-n10-c10http://www.google.com/这个命令的意思是启动ab,向www.google.com发送10个请求(-n10),并每次发送10个请求(-c10)——也就是说一次都发过去了。跟着下面的是ab输出的测试报告,红色部分是我添加的注释。*/C:\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\bin>ab-n10-c10http://www.google.com/ThisisApacheBench,Version2.0.40-dev<$Revision:1.146$>apache-2.0Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/Copyright1997-2005TheApacheSoftwareFoundation,http://www.apache.org/Benchmarkingwww.google.com(bepatient).....doneServerSoftware:GWS/2.1ServerHostname:www.google.comServerPort:80DocumentPath:/DocumentLength:230bytesConcurrencyLevel:10/*整个测试持续的时间*/Timetakenfortests:3.234651seconds/*完成的请求数量*/Completerequests:10/*失败的请求数量*/Failedrequests:0Writeerrors:0Non-2xxresponses:10Keep-Aliverequests:10/*整个场景中的网络传输量*/Totaltransferred:6020bytes/*整个场景中的HTML内容传输量*/HTMLtransferred:2300bytes/*大家最关心的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值*/Requestspersecond:3.09[#/sec](mean)/*大家最关心的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值*/Timeperrequest:3234.651[ms](mean)/*这个还不知道是什么意思,有知道的朋友请留言,谢谢^_^*/Timeperrequest:323.465[ms](mean,acrossallconcurrentrequests)/*平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题*/Transferrate:1.55[Kbytes/sec]received/*网络上消耗的时间的分解,各项数据的具体算法还不是很清楚*/ConnectionTimes(ms)minmean[+/-sd]medianmaxConnect:20318926.1302954Processing:4021601462.030343154Waiting:4021601462.030343154Total:6024791276.430643184/*下面的内容为整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于3064毫秒,60%的用户响应时间小于3094毫秒,最大的响应时间小于3184毫秒*/Percentageoftherequestsservedwithinacertaintime(ms)50%306466%309475%312480%315490%318495%318498%318499%3184100%3184(longestrequest)更多信息ab不像LR那么强大,但是它足够轻便,如果只是在开发过程中想检查一下某个模块的响应情况,或者做一些场景比较简单的测试,ab还是一个不错的选择——至少不用花费很多时间去学习LR那些复杂的功能,就更别说那License的价格了。下面是ab的详细参数解释,大家有兴趣的可以研究一下,最近没有足够多的时间研究,如果哪位朋友有兴趣希望可以帮忙翻译一下每个参数的含义,有问题讨论也欢迎在这里回帖^_^ab
[-
A
auth-username
:
password
][-
c
concurrency
][-
C
cookie-name
=
value
][-
d
][-
e
csv-file
][-
g
gnuplot-file
][-
h
][-
H
custom-header
][-
i
][-
k
][-
n
requests
][-
p
POST-file
][-
P
proxy-auth-username
:
password
][-
q
][-
s
][-
S
][-
t
timelimit
][-
T
content-type
][-
v
verbosity
][-
V
][-
w
][-
x
<table>-attributes
][-
X
proxy
[:
port
]][-
y
<tr>-attributes
][-
z
<td>-attributes
][http://]
hostname
[:
port
]/
path
-A
auth-username
:
passwordSupplyBASICAuthenticationcredentialstotheserver.Theusernameandpasswordareseparatedbyasingle
:
andsentonthewirebase64encoded.Thestringissentregardlessofwhethertheserverneedsit(i.e.,hassentan401authenticationneeded).
-c
concurrencyNumberofmultiplerequeststoperformatatime.Defaultisonerequestatatime.
-C
cookie-name
=
valueAdda
Cookie:
linetotherequest.Theargumentistypicallyintheformofaname
=
valuepair.Thisfieldisrepeatable.
-d
Donotdisplaythe"percentageservedwithinXX[ms]table".(legacysupport).
-e
csv-fileWriteaCommaseparatedvalue(CSV)filewhichcontainsforeachpercentage(from1%to100%)thetime(inmilliseconds)ittooktoservethatpercentageoftherequests.Thisisusuallymoreusefulthanthe'gnuplot'file;astheresultsarealready'binned'.
-g
gnuplot-fileWriteallmeasuredvaluesoutasa'gnuplot'orTSV(Tabseparatevalues)file.ThisfilecaneasilybeimportedintopackageslikeGnuplot,IDL,Mathematica,IgororevenExcel.Thelabelsareonthefirstlineofthefile.
-h
Displayusageinformation.
-H
custom-headerAppendextraheaderstotherequest.Theargumentistypicallyintheformofavalidheaderline,containingacolon-separatedfield-valuepair(i.e.,
"Accept-Encoding:zip/zop;8bit"
).
-i
Do
HEAD
requestsinsteadof
GET
.
-k
EnabletheHTTPKeepAlivefeature,i.e.,performmultiplerequestswithinoneHTTPsession.DefaultisnoKeepAlive.
-n
requestsNumberofrequeststoperformforthebenchmarkingsession.Thedefaultistojustperformasinglerequestwhichusuallyleadstonon-representativebenchmarkingresults.
-p
POST-fileFilecontainingdatatoPOST.
-P
proxy-auth-username
:
passwordSupplyBASICAuthenticationcredentialstoaproxyen-route.Theusernameandpasswordareseparatedbyasingle
:
andsentonthewirebase64encoded.Thestringissentregardlessofwhethertheproxyneedsit(i.e.,hassentan407proxyauthenticationneeded).
-q
Whenprocessingmorethan150requests,
ab
outputsaprogresscounton
stderr
every10%or100requestsorso.The
-q
flagwillsuppressthesemessages.
-s
Whencompiledin(
ab-h
willshowyou)usetheSSLprotected
https
ratherthanthe
http
protocol.Thisfeatureisexperimentalandveryrudimentary.Youprobablydonotwanttouseit.
-S
Donotdisplaythemedianandstandarddeviationvalues,nordisplaythewarning/errormessageswhentheaverageandmedianaremorethanoneortwotimesthestandarddeviationapart.Anddefaulttothemin/avg/maxvalues.(legacysupport).
-t
timelimitMaximumnumberofsecondstospendforbenchmarking.Thisimpliesa
-n50000
internally.Usethistobenchmarktheserverwithinafixedtotalamountoftime.Perdefaultthereisnotimelimit.
-T
content-typeContent-typeheadertouseforPOSTdata.
-v
verbositySetverbositylevel-
4
andaboveprintsinformationonheaders,
3
andaboveprintsresponsecodes(404,200,etc.),
2
andaboveprintswarningsandinfo.
-V
Displayversionnumberandexit.
-w
PrintoutresultsinHTMLtables.Defaulttableistwocolumnswide,withawhitebackground.
-x
<table>-attributesStringtouseasattributesfor
<table>
.Attributesareinserted
<table
here
>
.
-X
proxy
[:
port
]
Useaproxyserverfortherequests.
-y
<tr>-attributesStringtouseasattributesfor
<tr>
.
-z
<td>-attributesStringtouseasattributesfor
<td>
.相关链接ab是Apache的一个安装组件,所以需要下载Apache安装后才能使用,可以访问Apache的项目主页来下载http://httpd.apache.org/download.cgiab的更多信息可以参加Apache主页上的描述http://httpd.apache.org/docs/2.0/programs/ab.html
上面是转自作者陈雷的文章,以下备注是摘自其它网友的解释
备注一:
ab-ApacheHTTP服务器性能测试工具
ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

语法
ab[-Aauth-username:password][-cconcurrency][-Ccookie-name=value][-d][-ecsv-file][-ggnuplot-file][-h][-Hcustom-header][-i][-k][-nrequests][-pPOST-file][-Pproxy-auth-username:password][-q][-s][-S][-ttimelimit][-Tcontent-type][-vverbosity][-V][-w][-x<table>-attributes][-Xproxy[:port]][-y<tr>-attributes][-z<td>-attributes][http://]hostname[:port]/path

选项
-Aauth-username:password
向服务器提供基本认证信息。用户名和密码之间由一个":"隔开,并将被以base64编码形式发送。无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送。
-cconcurrency
一次产生的请求个数。默认是一次一个。
-Ccookie-name=value
对请求附加一个"Cookie:"头行。其典型形式是name=value的一个参数对。此参数可以重复。
-d
不显示"percentageservedwithinXX[ms]table"消息(为以前的版本提供支持)。
-ecsv-file
产生一个逗号分隔(CSV)文件,其中包含了处理每个相应百分比请求(从1%到100%)所需要的相应百分比时间(以微秒为单位)。由于这种格式已经"二进制化",所以比"gnuplot"格式更有用。
-ggnuplot-file
把所有测试结果写入一个"gnuplot"或者TSV(以Tab分隔)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Excel中。其中的第一行为标题。
-h
显示使用方法的帮助信息。
-Hcustom-header
对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值(如:"Accept-Encoding:zip/zop;8bit")。
-i
执行HEAD请求,而不是GET。
-k
启用KeepAlive功能,即在一个HTTP会话中执行多个请求。默认不启用KeepAlive功能。
-nrequests
在测试会话中所执行的请求个数。默认仅执行一个请求,此时其结果不具有意义。
-pPOST-file
包含了POST数据的文件。
-Pproxy-auth-username:password
对一个中转代理提供基本认证信息。用户名和密码由一个":"隔开,并将被以base64编码形式发送。无论服务器是否需要(即是否发送了407代理认证需求代码),此字符串都会被发送。
-q
如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以屏蔽这些信息。
-s
用于编译中(ab-h会告诉你)使用了SSL的受保护的https,而不是http协议的时候。此功能是实验性的,最好不要用。
-S
不显示中值和标准偏差值,而且在均值和中值为标准偏差值的1到2倍时,也不显示警告或出错信息。默认时,会显示最小值/均值/最大值等数值。(为以前的版本提供支持)
-ttimelimit
测试所进行的最大秒数。内部隐含值是"-n50000"。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-Tcontent-type
POST数据时所使用的"Content-type"头信息。
-vverbosity
设置显示信息的详细程度,4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
-V
显示版本号并退出。
-w
以HTML表格形式输出结果。默认时,它是白色背景的两列宽度的一张表。
-x<table>-attributes
设置<table>属性的字符串。此属性被填入<table这里>。
-Xproxy[:port]
对请求使用代理服务器。
-y<tr>-attributes
设置<tr>属性的字符串。
-z<td>-attributes
设置<td>属性的字符串。

备注二:
下面是我做的验证:
描述:并发5个请求的情况下,完成10次访问百度首页的请求。也就是说,分两次向百度首页发送请求,每次并发数是5个。
$ab-n10-c5http://www.baidu.com/

执行结果:
Timeperrequest:8.556[ms](mean)
Timeperrequest:1.711[ms](mean,acrossallconcurrentrequests)

分析:
8.556是“每1个请求”的响应时间,每1个请求包含了“5个并发”。所以1.711是“每1个并发”的响应时间。

补充:
第2个“Timeperrequest”后面的括号里显示的“acrossallconcurrentrequests”也就不难理解了,意思是“每1个请求内的每1个线程”的响应时间。

这样算来,1.711*5约等于8.556是能够反过来验证的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Apache ab