转自: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压力测试工具-批量压测脚本相关推荐

  1. apache ab压力测试工具-批量压测脚本

    概述 ab(Apache benchmark)是一款常用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.如果想要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行a ...

  2. ab压力测试php脚本,ab压力测试工具-批量压测脚本

    ab(Apache benchmark)是一款经常使用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.若是想要批量执行不一样的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行a ...

  3. ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具

    AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...

  4. 运维之道 | apachebench ab压力测试工具

    apachebench ab压力测试工具 一.ab的原理 ab是apachebench命令的缩写 ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是 ...

  5. Apache ab压力测试工具

    查看apache是否安装 # rpm -qa httpd httpd-2.2.3-63.el5.centos (在apache 版本2以后,apache全部改名为httpd) ab压力测试工具是apa ...

  6. 【Apache】Apache ab压力测试工具Window下载和用法详解

    ab是apache自带的网站压力测试工具.  使用起来非常的简单和方便.  不仅仅是可以apache服务器进行网站访问压力测试,还可以对其他类型的服务器进行压力测试.  比如nginx,tomcat, ...

  7. 高并发ab压力测试工具

    Apache ab 介绍 : Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 注: centos6 默认安装 ab 安装命令 yum install y htt ...

  8. 接口压力测试:Siege压测安装、使用和说明

    简介 siege是一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行. 下载安装 环境:centos 6.4 ...

  9. 压力测试ab安装 linux,Centos8下安装ab压力测试工具及ab命令详解

    释放双眼,带上耳机,听听看~! 1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以 ...

最新文章

  1. Scrum Meeting 博客汇总
  2. python子进程关闭fd_如果创建了multiprocessing.Pool,Python子进程wait()将失败
  3. 记录完全分布式开发zookeeper hadoop flume kafka hbase
  4. RxJs Subject, AnonymousSubject, BehaviorSubject, ReplaySubject和AsyncSubject
  5. 移动平台自动化测试:appium(一)
  6. ExtJS Grid 与 Asp.NET 通信
  7. Vjudge 2016-5-10 math test
  8. SQL 取空格右边的字符_从零学会SQL,第2关
  9. js 添加事件 attachEvent 和addEventListener 的用法
  10. 计算机0812是学硕还是专硕,的计算机是专硕还是学硕
  11. thinkphp 一个文件怎么调用另一个文件中的define()_ThinkPHP 简易开发思路 amp;amp; MVC和URL跳转...
  12. Windows Bat脚本实现定时重启应用程序
  13. mysql数据库原理及应用实训报告_《数据库原理及应用》实验报告.doc
  14. RFID技术与应用 复习用
  15. 郑州大学linux安装锐捷客户端
  16. 汇川plc支持c语言吗,汇川PLC可编程控制器的功能特点
  17. 如何在Mac上卸载软件?用这三种方法简单、干净、快速
  18. 活动倒计时的一些想法
  19. 继续BT的研究-第二部份关于BT中的tracker
  20. 2022年G2电站锅炉司炉操作证考试题库及答案

热门文章

  1. JAVA数据结构篇--5理解HashMap
  2. 彻底搞懂 offsetX、scrollX、clientX 的区别
  3. 读俞敏洪老师的文章--坚持下去.[他给了我勇气]
  4. Ubuntu16开机黑屏,无法进入系统
  5. CVE-2019-1388 Windows UAC 漏洞复现
  6. QMessageBox修改字体大小和button大小
  7. Java用抽象类模仿动物的叫声
  8. 防火墙双机设备(旁挂组网),HRP双主原因
  9. [答疑]火车售票的类图
  10. 抖音点赞最多的标题_抖音吸引眼球的标题 抖音点赞高的句子