自学内容网 自学内容网

Apache压测工具ab(Apache Bench)工具的下载安装和使用示例

场景

Jmeter进行http接口压力测试:

Jmeter进行http接口压力测试_接口压测两万量-CSDN博客

上面讲压测工具Jmeter的使用,下面介绍另外一个ab(Apache Bench)压测工具的使用。

apache bench

apache bench是apache自带的压力测试工具。

ab不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。

ab工具上手学习较快,可以提供需要的基本性能指标,但没有图形化结果,不能监控。

因此可以用作临时紧急任务和简单测试。

Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载。

在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。

远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)。

进入apache官网

Welcome! - The Apache HTTP Server Project

Download-Files for Microsoft Winodws,这里是在windows电脑上

点击Apache Lounge

下载对应的zip并解压即可,在bin目录下打开cmd,输入

ab -V

则是下载运行成功。

注:

博客:
霸道流氓气质-CSDN博客

实现

interfake模拟get和post接口

使用接口模拟工具模拟一个get和post请求

方式比较多,这里使用如下方式。

HTTP JSON接口模拟工具interfake的使用(模拟接口返回json数据):

HTTP JSON接口模拟工具interfake的使用(模拟接口返回json数据)-CSDN博客

其中interfake模拟post请求的写法为

interfake.post('/badaoPost').status(200)
.body(
    { 
        "id": 123,
        "name": "霸道的程序猿",
        "age": 100,
        "address":"青岛",
        "banji":"一班"
    }
);
interfake.listen(666);

完整的js

var Interfake = require('interfake');
var interfake = new Interfake();

interfake.get('/badao').status(200)
.body(
    { 
        "id": 123,
        "name": "霸道的程序猿",
        "age": 100,
        "address":"青岛",
        "banji":"一班"
    }
);
interfake.post('/badaoPost').status(200)
.body(
    { 
        "id": 123,
        "name": "霸道的程序猿",
        "age": 100,
        "address":"青岛",
        "banji":"一班"
    }
);
interfake.listen(666);

使用ab压力测试get请求接口

接口模拟成功后,对get请求接口进行压测

在上面bin下ab.exe所在的目录下打开的cmd中,输入

​ab -n 100 -c 10 http://127.0.0.1:666/badaoStu

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

其它参数

-n

即requests,用于指定压力测试总共的执行次数。

-c

即concurrency,用于指定压力测试的并发数。

-t

即timelimit,等待响应的最大时间(单位:秒)。

-b

即windowsize,TCP发送/接收的缓冲大小(单位:字节)。

-p

即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。

-u

即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。

-T

即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。

-v

即verbosity,指定打印帮助信息的冗余级别。

-w

以HTML表格形式打印结果。

-i

使用HEAD请求代替GET请求。

-x

插入字符串作为table标签的属性。

-y

插入字符串作为tr标签的属性。

-z

插入字符串作为td标签的属性。

-C

添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。

-H

添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。

-A

添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。

-P

添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。

-X

指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。

-V

打印版本号并退出。

-k

使用HTTP的KeepAlive特性。

-d

不显示百分比。

-S

不显示预估和警告信息。

-g

输出结果信息到gnuplot格式的文件中。

-r

指定接收到错误信息时不退出程序。

-e

输出结果信息到CSV格式的文件中。

-h

显示用法信息,其实就是ab -help。

虽然ab可以配置的参数选项比较多,但是,一般情况下我们只需要使用形如ab -n 数字 -c 数字 url路径的命令即可。

ab压测结果说明

上面的压测结果

server开头的三个是web服务器的信息。

Document开头的两个是请求的文档的位置以及大小/http响应的正文长度。

中间重要部分说明

Concurrency Level: 100

//并发请求数

Time taken for tests: 50.872 seconds

//整个测试持续的时间

Complete requests: 1000

//完成的请求数

Failed requests: 0

//失败的请求数

Total transferred: 13701482 bytes

//整个场景中的网络传输量

HTML transferred: 13197000 bytes

//整个场景中的HTML内容传输量

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

//吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值

Time per request: 5087.180 [ms] (mean)

//用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值

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

//服务器平均请求处理时间,大家最关心的指标之三

Transfer rate: 263.02 [Kbytes/sec] received

//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

最后面的这段是每个请求处理时间的分布情况,50%的处理时间在8ms内,66%的处理时间在8ms内...,

重要的是看90%的处理时间。

ab中压测post请求

cmd中执行如下

​ab -n 100 -c 10 -T application/json -p D:/test/payload.json http://127.0.0.1:666/badaoPost

其中-p代表请求的body,其文件内容为

    { 
        "id": 123,
        "name": "霸道的程序猿",
        "age": 100,
        "address":"青岛",
        "banji":"一班"
    }

压测结果


原文地址:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140610699

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!