一文告诉你 ab 如何做性能测试,详解测试派

一文告诉你 ab 如何做性能测试

说到 ab,可能有同学听说过,不知道的同学,也可能马上就去百度了。ab 是 apache 服务器附带一个工具,下载了 apache 服务,那么在它的 bin 文件夹中,就有这个工具命令。

但是,

我的项目不是用 apache 做服务器,我想用这个工具,就一定需要下载 apache 服务吗?这个 ab 工具,可以独立安装。

安装 ab

在你的 Linux 服务器上,执行:

# centos系统sudo yum -y install httpd-tools# ubuntu系统sudo apt-get -y install apache2-utils

待命令安装完成后,在系统中执行ab -V如果一切正常,就能看到 ab 相关信息,说明你的电脑已经安装好了 ab 工具包了。

CentOS 中安装:

728 x 6891892 x 1790

Ubuntu 中安装:

728 x 4281885 x 1109

用法说明

在服务器上执行:

$ ab --helpab: wrong number of argumentsUsage: ab[options][http[s]://]hostname[:port]/pathOptions are:    -n requests    Number of requests to perform    -c concurrency  Number of multiple requests to make at atime-t timelimit    Seconds to max. to spend on benchmarking                    This implies -n50000-s timeout      Seconds to max.waitforeach response                    Default is30seconds    -b windowsize  Size of TCP send/receive buffer, in bytes    -B address      Address tobindto when making outgoing connections    -p postfile    File containing data to POST. Remember also toset-T    -u putfile      File containing data to PUT. Remember also toset-T    -T content-type Content-type header to useforPOST/PUT data, eg.'application/x-www-form-urlencoded'Default is'text/plain'-v verbosity    How much troubleshooting info to print    -w              Print out results in HTML tables    -i              Use HEAD instead of GET    -x attributes  String to insert as table attributes    -y attributes  String to insert as tr attributes    -z attributes  String to insert as td or th attributes    -C attribute    Add cookie, eg.'Apache=1234'.(repeatable)-H attribute    Add Arbitrary header line, eg.'Accept-Encoding: gzip'Inserted after all normal header lines.(repeatable)-A attribute    Add Basic WWW Authentication, the attributes                    are a colon separated username and password.    -P attribute    Add Basic Proxy Authentication, the attributes                    are a colon separated username and password.    -X proxy:port  Proxyserver and port number to use    -V              Print version number andexit-k              Use HTTP KeepAlive feature    -d              Do not show percentiles served table.    -S              Do not show confidence estimators and warnings.    -q              Do not show progress when doing more than150requests    -l              Accept variable document length(use thisfordynamic pages)-g filename    Output collected data to gnuplot format file.    -e filename    Output CSV file with percentages served    -r              Don''texiton socket receive errors.    -m method      Method name    -h              Display usage information(this message)-I              Disable TLS Server Name Indication(SNI)extension    -Z ciphersuite  Specify SSL/TLS cipher suite(See openssl ciphers)-f protocol    Specify SSL/TLS protocol(SSL2, TLS1, TLS1.1, TLS1.2 or ALL)-E certfile    Specify optional client certificate chain and private key

Usage:用法ab 参数 被测地址

参数:

-c concurrency: 一次产生的请求数,可以理解为并发数

-n requests:执行的总请求数,默认 1 次

-t timelimit:测试进行的最长时长,可以理解为持续施压时长

-s timeout: 最大超时等待时长

-p postfile: POST 请求文件,但是记得 配置 -T 参数

-u putfile: PUT 请求, 但是记得配置 -T 参数

-i: HEAD 请求

-m method: 方法名称

-T content-type: 指定 POST\PUT 请求的头部信息 Content-Type,默认为'text/plain',可以根据自己需要更改为如:application/x-www-form-urlencoded、application/json、multipart/form-data

-C attribute: 对请求附加一个 Cookie:行。其典型形式是 name=value 的一个参数对,此参数可以重复

-H attribute: 对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")

-A attribute: 对服务器提供 BASIC 认证信任。用户名和密码由一个:隔开,并以 base64 编码形式发送。无论服务器是否需要(即,是否发送了 401 认证需求代码),此字符串都会被发送

-g filename: 把所有测试结果写入一个'gnuplot'或者 TSV(以 Tab 分隔的)文件。此文件可以方便地导入到 Gnuplot,IDL,Mathematica,Igor 甚至 Excel 中。其中的第一行为标题

-e filename: 将执行的结果写到 CSV 文件,并提供百分比

-r : 出现错误时,不退出

案例操作

案例:并发请求,指定时长

ab -c100-t120https://www.baidu.com/

用100个并发用户,向 http://www.baidu.com/ 这个网址,持续请求120秒

案例:指定请求次数

ab -c100-n1000https://www.baidu.com/

用100个用户并发,总共请求1000次

案例:GET 请求带参数,用户登录

ab -c100-t10-p pdata.txt -T"application/x-www-form-urlencoded"http://172.17.0.1:8380/futureloan/mvc/api/member/register# data.txt文件内容为mobilephone=13500090018&pwd=123456780

728 x 3531903 x 922

案例:POST 请求,带参数,参数类型为 JSON,用户登录

ab -c1-n1-p user.json -T"application/json"-v4http://172.17.0.1:8808/erp/loginIn# user.json是请求的参数文件{"name":"029ip","pwd":"1234567890"}

728 x 3531903 x 922

结果参数说明

# ab -c 15 -t 10 -p data.txt -T "application/x-www-form-urlencoded"  http://172.17.0.1:8380/futureloan/mvc/api/member/registerThis is ApacheBench, Version 2.3 <$Revision:1843412$>Copyright1996Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 172.17.0.1(be patient)Finished1220requests# 总共请求数量# 服务器信息Server Software:Server Hostname:        172.17.0.1#服务器主机名Server Port:            8380#服务器端口Document Path:          /futureloan/mvc/api/member/register#请求的URL中的根绝对路径Document Length:60bytes#HTTP响应的正文长度Concurrency Level:      15#并发数Time takenfortests:  10.009 seconds#整个测试耗时Complete requests:      1220# 总共完成的请求数量Failed requests:        1219# 失败数(Connect: 0, Receive: 0, Length: 1219, Exceptions: 0)Total transferred:233008bytes#测试过程中产生的网络传输总量Total body sent:277425HTML transferred:87828bytes#测试过程中产生的HTML传输量Requests per second:    121.89[#/sec] (mean) # 平均每秒请求数Time per request:      123.065[ms](mean)# 每个请求平均时间,所有并发用户一起Time per request:      8.204[ms](mean, across all concurrent requests)#单个用户请求时间Transfer rate:          22.73[Kbytes/sec]received#吞吐率 每秒接收多少kb27.07 kb/s sent# 吞吐率, 每秒发送多少kb49.80 kb/s total#吞吐率 每秒多少kbConnection Times(ms)min  mean[+/-sd]median  max#(最小值、平均值、方差、中位数、最大值)Connect:000.204#socket链路建立消耗,代表网络状况好Processing:1121229.3123282#写入缓冲区消耗+链路消耗+服务器消耗Waiting:1121229.2123282#写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗Total:1121229.3123282#单个事务总时间#网络上消耗的时间的分解,表示这些请求在单位时间内从服务器获取的数据长度Percentage of the requests served within a certaintime(ms)50%1266%2675%21580%22190%29395%50398%87999%1131100%3282(longest request)

注意事项

-c 设置最大并发数,一般不超过 1024,因为系统默认设置最大打开文件数为 1024,Linux 中,可以通过 ulimit -a 查看

-n 指定最大请求数,但是不能操作 50000

总结

总体来说,ab工具小巧灵活,学习上手快,可以提供基本的性能测试指标。但是,不能做复杂的脚本开发,没有图形化结果,不能监控。所以,ab工具做个临时的紧急的简单测试是可以的。

想了解更多有趣,有料的测试相关技能技巧,欢迎关注柠檬班微信公众号,或在腾讯课堂中搜索柠檬班机构,观看测试相关视频。

作者:Allen

链接:http://testingpai.com/article/1595507309308

来源:测试社区

协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357