Apache Bench 也就是 ab,是 Apache 开发的一个超文本传输协议(HTTP)的基准测试工具。
前不久刚被 Appium 虐完之后,觉得 ab 用起来实在太简单太好用了!
不过他俩不是一个东西,测试的方向也不一样(一个测试界面,一个测试接口),不能直接做比较的。
嘛,但也阻止不了我这样觉得。
原文链接:https://www.tutorialspoint.com/apache_bench/apache_bench_quick_guide.htm
安装
在 linux 上的安装特别简单,一个命令就可以搞定了:
$ sudo apt-get install apache2-utils
基本使用
比如,要对某一个 url (http://postman-echo.com/get) 进行测试,发起 100 个请求,并行数为 10,执行 60s:
$ ab -n 100 -c 10 -t 60 http://postman-echo.com/get
然后等待测试结果即可。
将结果输出到文件:
$ab -n 100 -c 10 -t 60 -g tmp/data.out http://postman-echo.com/get
结果输出
其实我写这篇文章主要是为了记录结果输出的。。。
- Server Software: 所测试的 web server 的名称,是从 HTTP header 获取的。
- Server Hostname: 执行命令时所指定的 DNS 或 IP 地址。
- Server Port: 测试时所连接的端口。如果执行命令时没有指定端口,会使用默认的 80(用于 http)或 443(用于 https)端口。
- SSL/TLS Protocol: 处理客户端和服务端之间的协议的参数,只有在使用 SSL 的情况下才会打印这个参数的值。
- Document Path: 请求的 URI。
- Document Length: 第一次成功返回的内容的大小(单位是 bytes),如果在测试过程中 length 发生改变,将认为发生了错误。
- Concurrency Level: 测试过程中并发的客户端数(等同于浏览网页的用户数)。
- Time Taken for Tests: 从创建第一个连接至接收到最后一个返回所花费的时间。
- Complete Requests: 成功返回的请求数。
- Failed Requests: 被认为是失败的请求的数量。如果该数字大于 0,会增加一行信息,展示由于连接、读取、错误 content length 或异常导致的错误的数量。
- Total Transferred: 从服务端接收到的总大小(单位是 bytes),这个值本质上是通过导线传递的总的大小。
- HTML Transferred: 从服务端接收的总的 document 的大小(单位是 bytes),这个值不包括从 HTTP headers 获取的内容的大小。
- Requests per second: 每秒钟的请求数。这个值是以请求的总数除以所花费的时间得到的结果。
- Time per request: 每个请求平均花费的时间。第一个值的公式为:并发数 x 所花费的时间 x 1000,第二个值的公式为:所花费的时间 x 1000(上面例子里,请求数是 100,并发数是 10,所以总数是 1000)
- Transfer rate: 传输率,计算公式为:总读取数 / 1024 / 所花费的时间
现在看下将结果输出到文件的话,输出的文件是什么样子的:
$ vim tmp/data.out
... ...
- starttime: 请求开始的日期时间。
- seconds: 和 starttime 是一样的,但它是 Unix 下的时间戳格式,可以通过命令
$ date -d @1496160697
得到时间信息;一般,如果是 13 位的,取前 10 位即可,后 3 位是毫秒。 - ctime: 连接时间。
- dtime: 执行时间。
- ttime: 总的时间,即 ttime = ctime + dtime
- wait: 等待时间。
这几个时间的定义和区别可以看下面这个图,就很容易区分了:
还有一些其他的命令参数,看 help 命令就好了。
就酱。