接口压测工具
一 ab
1 下载源
http://httpd.apache.org/download.cgi
httpd-2.4.46.tar.gz
下载到测试环境中:wget http://httpd.apache.org/download.cgi/httpd-2.4.46.tar.gz
yum install -y httpd
2 解压
tar -zxvf 压缩包
3 在 /usr/sbin 下执行 ab 命令
-n:执行的请求次数
-c:并发数量
-s:响应的超时时间
-p:post请求的数据文件路径,需要设置-T参数
-T:Content-Type -T ‘application/json’
-C:设置cookie,格式为"name=zhou"
4 配置环境变量
vim ~/.bash_profile
alias ab=/usr/sbin/ab
source ~/.bash_profile
5 参数
有关ab命令的使用,我们可以通过帮助命令进行查看。如下:
ab --help
下面对这些参数进行相关说明。
-n 在测试会话中所执行的请求个数。默认时,仅执行一个请求。
-c 一次产生的请求个数。默认是一次一个。
-t 测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p 包含了需要POST的数据的文件。
-P 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-T POST数据所使用的Content-type头信息。
-v 设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
-V 显示版本号并退出。
-w 以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i 执行HEAD请求,而不是GET。
-x 设置属性的字符串。
-X 对请求使用代理服务器。
-y 设置属性的字符串。
-z 设置属性的字符串。
-C 对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
-H 对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,“Accept-Encoding:zip/zop;8bit”)。
-A 对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-h 显示使用方法。
-d 不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-e 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比’gnuplot’格式更有用。
-g 把所有测试结果写入一个’gnuplot’或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
-i 执行HEAD请求,而不是GET。
-k 启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
-q 如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
这段展示的是web服务器的信息,可以看到服务器采用的是nginx,
域名是test.com,
端口是80
这段是关于请求的文档的相关信息,
所在位置“/”,
文档的大小为338436 bytes(此为http响应的正文长度)
Concurrency Level: 10 //并发请求数
Time taken for tests: 43.167 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%的处理时间在4930ms内,66%的处理时间在5008ms内…,重要的是看90%的处理时间,响应情况
有时候进行压力测试需要用户登录,怎么办?
请参考以下步骤:
先用账户和密码登录后,用开发者工具找到标识这个会话的Cookie值(Session ID)记下来
如果只用到一个Cookie,那么只需键入命令:
ab -n 100 -C key=value http://test.com/
如果需要多个Cookie,就直接设Header:
ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/
POST接口压测
ab -n 5000 -c 300 -p post.txt -T ‘application/json’ url
其中,-p 表示需要携带的请求体,一般是.txt格式文件,文件内容如下:
{“toBank”:“123456”}; -T 表示请求体格式,一般为’application/json’
二 siege
压测工具的下载地址: http://download.joedog.org/siege/
2 tar -zxvf siege-4.0.0.tar.gz
3 cd siege-4.0.0/
4 配置
./configure --prefix=pwd
--with-ssl=/dir/with/ssl
make
make install
5 cd bin/
6 创建 .json文件
格式模板:
get请求模板 : (完整的)url (没有GET)
post请求模板 : (完整的)url POST BODY (data格式的参数 没有大括号)
7
在bin目录下执行
./siege -H “Content-Type:application/json” -c 1 -t 4m -f ./文件名.json -b > out.txt 2>&1
8 工具的使用注意
工具默认最大支持255个并发,需要修改工具支持的最大并发数,压测时务必要带上 -b 这个参数,才能达到压测的效果
参数
-c 200 指定并发数200
-r 5 指定测试的次数5
-f urls.txt 制定url的文件
-i internet系统,随机发送url
-b 请求无需等待 delay=0
-t 5 持续测试5分钟(单位S\M\H代表秒\分\时。单位大小写不敏感。数字和单位之间不要有空格)
# -r和-t一般不同时使用
.json文件的内容格式
get请求
url
post请求
url POST body
post请求的 参数为 data格式
url POST body = json字符串去掉最外层大括号
对多个url进行压测
./siege -c num0 -t num1M -f file_url.txt file_url.txt为url文件
输出结果说明
Transactions: 30000 hits 完成30000次处理
Availability: 100.00 % 100.00 % 成功率
Elapsed time: 68.59 secs 总共使用时间
Data transferred: 817.76 MB 共数据传输 817.76 MB
Response time: 0.04 secs 响应时间,显示网络连接的速度
Transaction rate: 437.38 trans/sec 平均每秒完成 437.38 次处理
Throughput: 11.92 MB/sec 平均每秒传送数据
Concurrency: 17.53 实际最高并发连接数
Successful transactions: 30000 成功处理次数
Failed transactions: 0 失败处理次数
Longest transaction: 3.12 每次传输所花最长时间
Shortest transaction: 0.00 每次传输所花最短时间