压力测试短小精悍小工具ab(apachebench)介绍

  • Post author:
  • Post category:其他


压力测试短小精悍小工具ab(apachebench)介绍



ab工具简介

ab的全称是Apache Bench,是 Apache 服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。优点是小巧简单,上手学习较快,可以提供需要的基本性能指标,缺点就是没有图形化结果,不能监控。

注意:ab工具不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。测试使用时需要注意,不能一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。




安装

window系统安装,通过官网下载apache zip安装包,解压后放在C(or)D盘根目录

下载网址:https://www.apachehaus.com/cgi-bin/download.plx

如下图位置点击下载zip包

在这里插入图片描述




启动ab工具

以安装路径为D:\Apache24\bin为例

打开终端输入命令

切换D盘

cd D:\Apache24\bin

输入ab –help,显示所有指令集合,即ab工具安装成功且能正常启动

在这里插入图片描述

参数解析:

-n 测试会话中所执行的请求个数,默认仅执行一个请求,如果不指定-t参数,默认执行完所有请求后自动结束压测

-c 一次产生的请求个数,即同一时间发出多少个请求,默认为一次一个,此参数可以控制对服务器的单位时间内的并发量

-t 测试所进行的最大秒数,默认为无时间限制….其内部隐含值是[-n 50000],它可以使对服务器的测试限制在一个固定的总时间以内,如果时间到了,请求个数还未执行完,也会被停止。

-p 包含了需要POST的数据的文件,数据格式以接口请求参数定义的格式为准,eg. xxx.json

-T POST 数据所使用的Content-type头信息,指定请求参数格式,eg. application/json

-r 在接口返回失败后,默认会终止压测,添加此参数后压测会继续进行

-v 设置显示信息的详细程度

-w 以HTML表格的形式输出结果,默认是白色背景的两列宽度的一张表

-i 以HTML表格的形式输出结果,默认是白色背景的两列宽度的一张表

-x 设置属性的字符串,此属性被填入[/table]

-y 设置属性的字符串

-z 设置[table]属性的字符串

-C 对请求附加一个Cookie行,其典型形式是name=value的参数对,此参数可以重复

-H 对请求附加额外的头信息,此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如”Accept-Encoding:zip/zop;8bit”)

-A HTTP验证,用冒号:分隔传递用户名及密码

-P 无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送

-X 对请求使用代理服务器

-V 显示版本号并退出

-k 启用HTTP KeepAlive(长连接)功能,即在一个HTTP会话中执行多个请求,默认为不启用KeepAlive功能

-d 不显示”percentage served within XX [ms] table”的消息(为以前的版本提供支持)

-S 不显示中值和标准背离值,且均值和中值为标准背离值的1到2倍时,也不显示警告或出错信息,默认会显示最小值/均值/最大值等(为以前的版本提供支持)

-g 把所有测试结果写入一个’gnuplot’或者TSV(以Tab分隔的)文件

-e 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微秒为单位)时间

-h 显示使用方法

-k 发送keep-alive指令到服务器端




开始测试

输入命令

ab -n 100 -c 10 https://www.baidu.com/

例如:ab -n 100 -c 10

其中-n表示请求数,-c表示并发数




结果分析

上面的命令运行完毕后就出来测试报告,如下图
在这里插入图片描述

测试报告指标详细解析:

Server Software: nginx

Server Hostname:

#请求的URL主机名

Server Port: 80

#请求端口

Document Path: /#/

#请求路径

Document Length: 15466 bytes

#HTTP响应数据的正文长度

Concurrency Level: 10

#并发用户数,这是我们设置的参数之一(-c)

Time taken for tests: 1.169 seconds

#所有这些请求被处理完成所花费的总时间 单位秒

Complete requests: 100

#总请求数量,这是我们设置的参数之一(-n)

Failed requests: 0

#表示失败的请求数量

Total transferred: 1577000 bytes

#所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度

HTML transferred: 1546600 bytes

#吞吐量,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间

Requests per second: 85.55 [#/sec] (mean)

#用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)

Time per request: 116.889 [ms] (mean)

#用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)

Time per request: 11.689 [ms] (mean, across all concurrent requests)

#服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level

Transfer rate: 1317.52 [Kbytes/sec] received

#表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Connection Times (ms)

min mean[+/-sd] median max

Connect: 4 11 5.2 14 20

Processing: 13 95 18.0 98 140

Waiting: 8 58 27.2 56 140

Total: 29 106 17.5 109 146

Percentage of the requests served within a certain time (ms)

50% 109

#50%的请求在109毫秒内返回(以下同此意思)

66% 111

75% 113

80% 116

90% 120

95% 123

98% 132

99% 146

#99%的请求在146毫秒内返回

100% 146 (longest request)




延伸

以上列举的为一个简单的get请求url做压测,还可以做post请求压测,如下:

1.准备测试post接口url,找到post参数

2.新建一个文本文档,里面内容填入post参数内容(可以是json格式,可以是&格式)如图

在这里插入图片描述

3.输入指令:ab -n 1 -c 1 -p D:\Apache24\ceshi.txt -T application/x-www-form-urlencoded “post接口url地址”

其中:

-p 包含POST参数的文件

-T 内容类型。这个一般和-p 一起使用(Content-type header to use for POST data.)

D:\Apache24\ceshi.txt为存放post请求参数的路径

application/x-www-form-urlencoded为固定格式

最后url地址需要加引号

得到的结果如下:

在这里插入图片描述

这样就完成了一次post请求url压测;参数的分析详见上面示例

以上为简单的ab指令执行get/post请求url压力测试;除了简单的指令外还有更多复杂的指令来实现复杂的场景,以后将会做额外补充。也可网上查找相关资料进行学习归纳。谢谢阅读



版权声明:本文为weixin_46579262原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。