(原创)初识Apache Bench测试

Apache Bench是Apache附带的一个工具,Apache Benchmark测试简称ab测试,也叫ab压力测试,用来帮助web开发者了解所开发网站的性能。

1.安装

网上关于ab测试的下载、安装已经有很多帖子写的很详尽,这里就不多说。
可以参考:
web性能测试:apache benchmark(ab)
使用Apache Bench对网站性能进行测试

2.参数解析

 我这里是Windows系统,所以用cmd窗口示例

打开cmd窗口,cd到Apache的bin目录下,执行"ab",它就会告诉你参数错误,并给出正确使用方法的提示

(原创)初识Apache Bench测试_第1张图片
1.png

如图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压力测试了。

(原创)初识Apache Bench测试_第2张图片
2.png

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.png

4. 加不加/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
(原创)初识Apache Bench测试_第3张图片
5.png
  • 对于“multipart/form-data”,web性能测试:apache benchmark(ab)这篇博客也实现了,如图6所示
(原创)初识Apache Bench测试_第4张图片
6.png
  • 对于“application/json”这种格式,网上实现的比较少,甚至有人疑问是否不支持这种数据格式的POST请求测试。

我今天在公司恰好用的是这种格式,不知道是不是和文件类型有关,我使用的参数文件是json文件、而不是txt文件,如图7所示,命令为:

abs -n 10 -c 10 -p accdetect_ab_test.json -T application/json "https://x.x.com/task"
(原创)初识Apache Bench测试_第5张图片
7.png
  • 不论哪种格式,ab测试都只能使用同一组参数进行重复请求,若想对不同参数组合进行遍历测试,需要另谋出路。
  1. 测试结果分析

从前面对百度测试截图也可以看到返回的数据有很多,我们最主要关心的就是以下三个:

Requests pre second          每秒响应请求次数
Time per request                 用户平均等待时间(一次并发全部完成的耗时)
Time per request                 请求平均处理时间(并发内单个请求的耗时,1 / Requests pre second )

贴上今天在测试服务器上对将上线的爬虫系统做的小测试,
分别是POST提交异步任务总数10并发10(图8)、GET查询任务结果总数10000并发100(图9),测试结果显示单机部署的性能数据不尽人意,希望生产环境的集群化部署会有更好的性能表现。

(原创)初识Apache Bench测试_第6张图片
8.png
(原创)初识Apache Bench测试_第7张图片
9.png

参考

web性能测试:apache benchmark(ab)
使用Apache Bench对网站性能进行测试
ab 发送post请求 测试API性能

你可能感兴趣的:((原创)初识Apache Bench测试)