基础命令
ab -n 100 -c 100 http://www.baidu.com
AB还有很多参数来满足其他场景。
-t 测试最长的时间,默认没有限制。
-r 当接收到socket错误的时候不退出
-k 启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认不启用。
-p 指定POST的数据文件,配合(-T使用)
-T 指定POST/PUT数据所使用的 Content-type 头信息,配合(-p使用)
-C 设置登录的cookie。多个cookie用逗号分割。
-v 设置输出信息的详细程度。4或更大值显示头信息,3或更大值显示响应代码(404, 200 等), 2或更大值可以显示警告和其他信息。
结果分析
平均每秒请求数,即吞吐率,大家最关心的指标之一,相当于负载中的每秒事务数,后面括号中的 mean 表示这是一个平均值。
每次并发请求平均耗时,即用户平均请求等待时间,大家最关心的指标之二,相当于负载中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值。
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
平均每个请求的耗时,即服务器平均请求处理时间,大家最关心的指标之三。
Time per request(across all concurrent requests)= Time taken for tests / Complete requests
模拟请求
如果要压测数据接口,可以用-p和-T两个参数来模拟请求:
以x-www-form-urlencoded形式发送
ab -n 1000 -c 100 -p post.txt -T 'application/x-www-form-urlencoded' http://www.test.com/test/api
以multipart/form-data形式发送
ab -n 1000 -c 100 -p post.txt -T 'multipart/form-data; boundary=--WebKitFormBoundaryE19zNvXGzXaLvS5C' http://www.test.com/test/api
其中post.txt文件内容为post需要的参数,例如 name=xiaoming&age=28
模拟登录
有些接口需要登录鉴权时,需要用到-C参数设置cookie来模拟登录。先用账户和密码登录,用开发者工具找到标识这个会话的Cookie值记下来,然后通过设置-C参数来请求:
ab -n 100 -c 100 -C "uin=o0369491785;skey=@MC7dyF5lu;" http://www.test.com/api
注意事项
需要注意的是,AB命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
总结:
AB工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。因此它可以用作简单的压力测试和临时紧急任务。图形化的工具推荐jmeter或者LoadRunner。