使用:

在 Windows 系统下,打开 cmd 命令行窗口,定位到 apache 安装目录的 bin 目录下
cd C:\XXX\Apache\bin

键入命令: ab -n 800 -c 800 http://www.baidu.com

c 800 即:每次并发 800 个

n 800 即: 共发送 800 个请求

ab -t 60 -c 100 http://www.baidu.com

在 60 秒内发请求,一次 100 个请求。

参数的的请求

ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt “http://www.baidu.com"

p.txt 是和 ab.exe 在一个目录 p.txt 中可以写参数,如 p=wdp&fq=78, 要注意编码问题

参数中的三种形式

application/x-www-form-urlencoded (默认值)

就是设置表单传输的编码,典型的 post 请求

multipart/form-data.

用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片,mp3,文件等等

text/plain . 是纯文本传输的意思

结果分析:
 ab -n 100 -c 100 -p p.txt -T application/x-www-form-urlencoded "http://www.baidu.com"
 This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
 
 Benchmarking apiv2.aligogo.in (be patient).....done

Server Software:        nginx/1.16.0
Server Hostname:        apiv2.aligogo.in
Server Port:            80

Document Path:          /Api/getOptimal   //测试的地址
Document Length:        51 bytes     //返回大小

Concurrency Level:      100       //测试的并发数
Time taken for tests:   4.076 seconds  //总耗时
Complete requests:      100      //完成的请求数量
Failed requests:        0    //失败的请求数量
Total transferred:      21400 bytes    //整个过程中的网络传输量
Total body sent:        92400   //不清楚,没找到相关说明
HTML transferred:       5100 bytes  //测试过程中产生的HTML传输量
Requests per second:    24.53 [#/sec] (mean)  //表示服务器吞吐量,每秒事务数,括号中的 mean 表示这是一个平均值
Time per request:       4076.348 [ms] (mean)  //表示用户请求的平均响应时间,后面括号中的mean表示这是一个平均值
Time per request:       40.763 [ms] (mean, across all concurrent requests)  //表示服务器请求平均处理时间,即实际运行时间的平均值
Transfer rate:          5.13 [Kbytes/sec] received                        
                        22.14 kb/s sent                        
                        27.26 kb/s total                        
                        //表示这些请求在单位时间内从服务器获取的数据长度,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms)
              min  mean[+/-sd] median   max    //min最小值、mean平均值、[+/-sd]方差、median中位数、maxz最大值
Connect:        0   31 300.0      1    3000    //socket链路建立消耗,代表网络状况好
Processing:   427 1908 1191.8   3043    3086   //写入缓冲区消耗+链路消耗+服务器消耗
Waiting:      427 1908 1191.8   3042    3086   //写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗
Total:        428 1939 1192.6   3045    3454   //单个事务总时间

Percentage of the requests served within a certain time (ms)
  50%   3045
  66%   3059
  75%   3067
  80%   3071
  90%   3081
  95%   3084
  98%   3087
  99%   3454
 100%   3454 (longest request)
 //整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于3045毫秒,66%的用户响应时间小于3059毫秒,最大的响应时间小于 3454 毫秒
重点关注
  • ab 判断成功与否知识判断 2xx 响应码,不接收服务器的返回值
  • ab 命令在一般系统上面做测试时候,一般并发不能超过 1024 个,其实是因为因为系统限制每个进程打开的最大文件数为 1024,可以用 ulimit -a 来查看
  • n 可以指定最大请求数,但是不能超过 50000 个
  • Time per request 是关注点
其他参数说明
Usage: ab [options] [http[s]://]hostname[:port]/path用法:ab [选项] 地址

选项:
Options are:
    -n requests    #执行的请求数,即一共发起多少请求。
    -c concurrency    #请求并发数。
    -t timelimit    #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
    -s timeout    #指定每个请求的超时时间,默认是30秒。
    -b windowsize    #指定tcp窗口的大小,单位是字节。
    -B address    #指定在发起连接时绑定的ip地址是什么。
    -p postfile    #指定要POST的文件,同时要设置-T参数。
    -u putfile    #指定要PUT的文件,同时要设置-T参数。
    -T content-type    #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
    -v verbosity    #设置详细模式等级。
    -w    #将结果输出到html的表中。
    -i    #使用HEAD方式代替GET发起请求。
    -y attributes    #以表格方式输出时,设置html表格tr属性。 
    -z attributes    #以表格方式输出时,设置html表格th或td属性。
    -C attribute    #添加cookie,比如'Apache=1234'。(可重复)
    -H attribute    #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
    -A attribute    #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
    -P attribute    #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
    -X proxy:port   #指定代理服务器的IP和端口。
    -V              #打印版本信息。
    -k              #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
    -d              #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
    -q              #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
    -g filename     #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
    -e filename     #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
    -r              #当收到错误时不要退出。
    -h              #输出帮助信息