ab压力测试工具-批量压测脚本
转自:https://www.cnblogs.com/exceptioneye/p/5179763.html
ab(Apache benchmark)是一款常用的压力测试工具。简单易用,ab的命令行一次只能支持一次测试。如果想要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行ab,估计会疯的。so,那么问题来了,批量模式怎么实现。
一、脚本说明
本脚本支持ab大多常用参数,如果你需要更多参数,可以通过修改本脚本,加入你想要的即可。本脚本的特色:
1,批量测试。注意,并不是简单的批量测试,你可以定测测试轮数,间隔时间。
2,阶梯并发增长定制测试,如并发从100到1000,每轮测5次等。
3,支持ab的post file模式,你只要在参数-P | --postfile中带上你的数据文件即可。
4,压测完指标分析显示,本shell可以将ab中常用的指示即时分析出来。
5,ab-test-tools.sh 脚本说明:
命令格式:
-N|--count 总请求数,缺省 : 5w
-C|--clients 并发数, 缺省 : 100
-R|--rounds 测试次数, 缺省 : 10 次
-S|-sleeptime 间隔时间, 缺省 : 10 秒
-I|--min 最小并发数, 缺省: 0
-X|--max 最大并发数,缺省: 0
-J|--step 次递增并发数
-T|--runtime 总体运行时间,设置此项时最大请求数为5w
-P|--postfile post数据文件路径
-U|--url 测试地址
二、脚本代码
#!/bin/bash echo '*==========================================================*' echo '| 本脚本工具基于ab(Apache benchmark),请先安装好ab, awk |' echo '| 注意: |' echo '| shell默认最大客户端数为1024 |' echo '| 如超出此限制,请使用管理员执行以下命令: |' echo '| ulimit -n 655350 |' echo '*==========================================================*'function usage() {echo ' 命令格式:'echo ' ab-test-tools.sh'echo ' -N|--count 总请求数,缺省 : 5w'echo ' -C|--clients 并发数, 缺省 : 100'echo ' -R|--rounds 测试次数, 缺省 : 10 次'echo ' -S|-sleeptime 间隔时间, 缺省 : 10 秒'echo ' -I|--min 最小并发数, 缺省: 0'echo ' -X|--max 最大并发数,缺省: 0'echo ' -J|--step 次递增并发数'echo ' -T|--runtime 总体运行时间,设置此项时最大请求数为5w' echo ' -P|--postfile post数据文件路径'echo ' -U|--url 测试地址'echo ''echo ' 测试输出结果*.out文件'exit; }# 定义默认参数量 # 总请求数 count=50000 # 并发数 clients=100O # 测试轮数 rounds=10 # 间隔时间 sleeptime=10 # 最小并发数 min=0 # 最大数发数 max=0 # 并发递增数 step=0 # 测试地址 url='' # 测试限制时间 runtime=0 # 传输数据 postfile=''ARGS=`getopt -a -o N:C:R:S:I:X:J:U:T:P:h -l count:,client:,round:,sleeptime:,min:,max:,step:,runtime:,postfile:,help -- "$@"` [ $? -ne 0 ] && usage eval set -- "${ARGS}" while true docase "$1" in-N|--count)count="$2"shift;;-C|--client)clients="$2"shift;;-R|--round)rounds="$2"shift;;-S|--sleeptime)sleeptime="$2"shift;;-I|--min)min="$2"shift;;-X|--max)max="$2"shift;;-J|--step)step="$2"shift;;-U|--url)url="$2"shift;;-T|--runtime)runtime="$2"shift;;-P|--postfile)postfile="$2"shift;;-h|--help)usage;;--)shiftbreak;;esac shift done# 参数检查 if [ x$url = x ] thenecho '请输入测试url,非文件/以为结束'exit fiflag=0 if [ $min != 0 -a $max != 0 ] then if [ $max -le $min ] thenecho '最大并发数不能小于最小并发数'exitfiif [ $step -le 0 ]thenecho '并发递增步长不能<=0'exitfiif [ $min -lt $max ]thenflag=1fi fi# 生成ab命令串 cmd="ab -k -r"# 数据文件 if [ x$postf != x ] thencmd="$cmd -p $postf" fiif [ x$tl != x -a $tl != 0 ] then max=50000;cmd="$cmd -t$tl" fi cmd="$cmd -n$count"echo '-----------------------------'; echo '测试参数'; echo " 总请求数:$count"; echo " 并发数:$clients"; echo " 重复次数:$rounds 次"; echo " 间隔时间:$sleeptime 秒"; echo " 测试地址:$url";if [ $min != 0 ];then echo " 最小并发数:$min"; fiif [ $max != 0 ];then echo " 最大并发数:$max"; fiif [ $step != 0 ];then echo " 每轮并发递增:$step" fi# 指定输出文件名 datestr=`date +%Y%m%d%H%I%S` outfile="$datestr.out";# runtest $cmd $outfile $rounds $sleeptime function runtest() {# 输出命令echo "";echo ' 当前执行命令:'echo " $cmd"echo '------------------------------'# 开始执行测试cnt=1while [ $cnt -le $rounds ];doecho "第 $cnt 轮 开始"$cmd >> $outfile echo "\n\n" >> $outfileecho "第 $cnt 轮 结束"echo '----------------------------'cnt=$(($cnt+1))if [ $cnt -le $rounds ]; thenecho "等待 $sleeptime 秒"sleep $sleeptimefi done }temp=$cmd; if [ $flag != 0 ]; thencur=$minover=0while [ $cur -le $max ]docmd="$temp -c$cur $url"runtest $cmd $outfile $rounds $sleeptime cur=$(($cur+$step))if [ $cur -ge $max -a $over != 1 ]; thencur=$max over=1fidone else cmd="$cmd -c$clients $url"runtest $cmd $outfile $rounds $sleeptime fi# 分析结果 if [ -f $outfile ]; then echo '本次测试结果如下:' echo '+------+----------+----------+---------------+---------------+---------------+--------------------+--------------------+' echo '| 序号 | 总请求数 | 并发数 | 失败请求数 | 每秒事务数 | 平均事务(ms) | 并发平均事务数(ms) | 总体传输字节数 |' echo '+------+----------+----------+---------------+---------------+---------------+--------------------+--------------------+'comp=(`awk '/Complete requests/{print $NF}' $outfile`) concur=(`awk '/Concurrency Level:/{print $NF}' $outfile`) fail=(`awk '/Failed requests/{print $NF}' $outfile`) qps=(`awk '/Requests per second/{print $4F}' $outfile`) tpr=(`awk '/^Time per request:(.*)\(mean\)$/{print $4F}' $outfile`) tpr_c=(`awk '/Time per request(.*)(mean, across all concurrent requests)/{print $4F}' $outfile`) trate=(`awk '/Transfer rate/{print $3F}' $outfile`)for ((i=0; i<${#comp[@]}; i++)) doecho -n "|"printf '%6s' $(($i+1)) printf "|"printf '%10s' ${comp[i]}printf '|'printf '%10s' ${concur[i]}printf '|'printf '%15s' ${fail[i]}printf '|'printf '%15s' ${qps[i]}printf '|'printf '%15s' ${tpr[i]}printf '|'printf '%20s' ${tpr_c[i]}printf '|'printf '%20s' ${trate[i]}printf '|'echo '';echo '+-----+----------+----------+---------------+---------------+---------------+--------------------+--------------------+' done echo '' fi
三、测试示例
sh ab-test-tool.sh -N 100000 -C 100 -R 2 -I 100 -X 500 -J 80 -S 5 -U 'http://...'
四、注意事项
1,每次测试结果以“yymmddhhiiss.out"存放在脚本所在目录,因此请保持脚本目录可写。
2,ab的所有输出结果均可在.out中查到。测试结果只是展示部份指标,需要详细的可以在.out文件中查看
3,查看使用帮助可使用-h/–help。
4,linux终端默认1024限制,如需大于此数,请使用管理员执行:"ulimit -n 655350"
五、ab信息说明
Server Software: web服务器软件及版本 Server Hostname: 表示请求的URL中的主机部分名称 Server Port: 被测试的Web服务器的监听端口Document Path: 请求的页面路径 Document Length: 页面大小Concurrency Level: 并发数 Time taken for tests: 测试总共花费的时间 Complete requests: 完成的请求数 Failed requests: 失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求。 Write errors: 写入错误 Total transferred: 总共传输字节数,包含http的头信息等。使用ab的-v参数即可查看详细的http头信息。 HTML transferred: html字节数,实际的页面传递字节数。也就是减去了Total transferred中http响应数据中头信息的长度。 Requests per second: 每秒处理的请求数,服务器的吞吐量,等于:Complete requests / Time taken for tests Time per request: 平均数,用户平均请求等待时间 Time per request: 服务器平均处理时间 Transfer rate: 平均传输速率(每秒收到的速率)。可以很好的说明服务器在处理能力达到限制时,其出口带宽的需求量。Connection Times (ms) 压力测试时的连接处理时间。min mean[+/-sd] median max Connect: 0 67 398.4 9 3009 Processing: 49 2904 2327.2 2755 12115 Waiting: 48 2539 2075.1 2418 12110 Total: 53 2972 2385.3 2789 12119
ab压力测试工具-批量压测脚本相关推荐
- apache ab压力测试工具-批量压测脚本
概述 ab(Apache benchmark)是一款常用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.如果想要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行a ...
- ab压力测试php脚本,ab压力测试工具-批量压测脚本
ab(Apache benchmark)是一款经常使用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.若是想要批量执行不一样的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行a ...
- ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具
AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...
- 运维之道 | apachebench ab压力测试工具
apachebench ab压力测试工具 一.ab的原理 ab是apachebench命令的缩写 ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是 ...
- Apache ab压力测试工具
查看apache是否安装 # rpm -qa httpd httpd-2.2.3-63.el5.centos (在apache 版本2以后,apache全部改名为httpd) ab压力测试工具是apa ...
- 【Apache】Apache ab压力测试工具Window下载和用法详解
ab是apache自带的网站压力测试工具. 使用起来非常的简单和方便. 不仅仅是可以apache服务器进行网站访问压力测试,还可以对其他类型的服务器进行压力测试. 比如nginx,tomcat, ...
- 高并发ab压力测试工具
Apache ab 介绍 : Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 注: centos6 默认安装 ab 安装命令 yum install y htt ...
- 接口压力测试:Siege压测安装、使用和说明
简介 siege是一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行. 下载安装 环境:centos 6.4 ...
- 压力测试ab安装 linux,Centos8下安装ab压力测试工具及ab命令详解
释放双眼,带上耳机,听听看~! 1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以 ...
最新文章
- Scrum Meeting 博客汇总
- python子进程关闭fd_如果创建了multiprocessing.Pool,Python子进程wait()将失败
- 记录完全分布式开发zookeeper hadoop flume kafka hbase
- RxJs Subject, AnonymousSubject, BehaviorSubject, ReplaySubject和AsyncSubject
- 移动平台自动化测试:appium(一)
- ExtJS Grid 与 Asp.NET 通信
- Vjudge 2016-5-10 math test
- SQL 取空格右边的字符_从零学会SQL,第2关
- js 添加事件 attachEvent 和addEventListener 的用法
- 计算机0812是学硕还是专硕,的计算机是专硕还是学硕
- thinkphp 一个文件怎么调用另一个文件中的define()_ThinkPHP 简易开发思路 amp;amp; MVC和URL跳转...
- Windows Bat脚本实现定时重启应用程序
- mysql数据库原理及应用实训报告_《数据库原理及应用》实验报告.doc
- RFID技术与应用 复习用
- 郑州大学linux安装锐捷客户端
- 汇川plc支持c语言吗,汇川PLC可编程控制器的功能特点
- 如何在Mac上卸载软件?用这三种方法简单、干净、快速
- 活动倒计时的一些想法
- 继续BT的研究-第二部份关于BT中的tracker
- 2022年G2电站锅炉司炉操作证考试题库及答案