Apache Bench是Apache附带的一个工具,Apache Benchmark测试简称ab测试,也叫ab压力测试,用来帮助web开发者了解所开发网站的性能。
1.安装
网上关于ab测试的下载、安装已经有很多帖子写的很详尽,这里就不多说。
可以参考:
web性能测试:apache benchmark(ab)
使用Apache Bench对网站性能进行测试
2.参数解析
我这里是Windows系统,所以用cmd窗口示例
打开cmd窗口,cd到Apache的bin目录下,执行"ab",它就会告诉你参数错误,并给出正确使用方法的提示
如图1所示,每个参数都有解释,静心读一遍差不多能弄明白,比较常用的就是前面几个参数
-n 总的请求数
-c 并发请求数
-p post请求的参数文件,同时要配合 -T指定参数类型
-u put请求的参数文件,同时要配合 -T指定参数类型
-T 指定模拟request的headers中的Content-Type参数,比如POST请求时使用“application/x-www-form-urlencoded”类型,默认是“text/plain”
懂了这几个参数就可以算是入门了,如图2所示,执行 “ab -n 10 -c 10 http://www.baidu.com/path” (path见后续说明),就是对百度做了一次总请求数10、并发10的ab压力测试了。
3.ab 与 abs
如果仔细的话就会发现Apache的bin目录下除了ab.exe还有一个abs.exe
这两个的关系就是:
ab 只能测试使用http协议的网站
abs 可以测试使用http或者https协议的网站
使用ab测试https协议的网站会报错“SSL not compiled in; not https support”
3.png只执行abs,不给参数的话,可以发现参数列表中多了-Z和-f两项,如图4所示,分别用来设置SSL的密钥算法套件和SSL协议。
4.png4. 加不加/path
之前查看博客使用Apache Bench对网站性能进行测试的时候,说是要在url后加"/path",而博客web性能测试:apache benchmark(ab)中并没有添加;
同时,前面本机测试百度是我也要添加"/path"参数,而今天在公司测试时并没有添加;
这样就搞得我有点困惑了。
开始我怀疑是版本问题,因为本机是Apache2.2,而公司用的是Apache2.4;然后对比两篇博客、以及本机显示结果,发现不论Apache是哪个版本,ApacheBench的Version 都是2.3,这个在每次测试结果中都有声明、包括版权。
然后我再想了想,得出自己的判断:
访问page url时,要在尾部加“/path”,表明测试访问的是页面内容;
访问api url时,不用加,表明测试访问的是数据接口。
如果判断有误,希望指正!
5. POST 请求的3种数据格式的参数模拟
大家知道POST请求的数据有如下3种传输格式
application/x-www-form-urlencoded
multipart/form-data
application/json
- 对于“application/x-www-form-urlencoded”格式网上也比较多,比如ab 发送post请求 测试API性能这篇博客就实现了,并且说明了由于占位符的原因要添加冗余参数如图5
- 对于“multipart/form-data”,web性能测试:apache benchmark(ab)这篇博客也实现了,如图6所示
- 对于“application/json”这种格式,网上实现的比较少,甚至有人疑问是否不支持这种数据格式的POST请求测试。
我今天在公司恰好用的是这种格式,不知道是不是和文件类型有关,我使用的参数文件是json文件、而不是txt文件,如图7所示,命令为:
abs -n 10 -c 10 -p accdetect_ab_test.json -T application/json "https://x.x.com/task"
7.png
- 不论哪种格式,ab测试都只能使用同一组参数进行重复请求,若想对不同参数组合进行遍历测试,需要另谋出路。
- 测试结果分析
从前面对百度测试截图也可以看到返回的数据有很多,我们最主要关心的就是以下三个:
Requests pre second 每秒响应请求次数
Time per request 用户平均等待时间(一次并发全部完成的耗时)
Time per request 请求平均处理时间(并发内单个请求的耗时,1 / Requests pre second )
贴上今天在测试服务器上对将上线的爬虫系统做的小测试,
分别是POST提交异步任务总数10并发10(图8)、GET查询任务结果总数10000并发100(图9),测试结果显示单机部署的性能数据不尽人意,希望生产环境的集群化部署会有更好的性能表现。
参考
web性能测试:apache benchmark(ab)
使用Apache Bench对网站性能进行测试
ab 发送post请求 测试API性能
网友评论