场景
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":"一班"}
压测结果