压力测试shell脚本

        一般情况下,用ab进行压测时,只执行一次的话,结果不是很准,所以我们就要手动的执行几次。这个操作很麻烦,这里写了个shell脚本,对apache的ab做了封装,只要传入指定的测试次数,自动进行,测试完成后返回平均的rps,以及最高和最低rps。
        下面的脚本需要把ab_dir的值换成自己的ab的目录,具体的参数有:
        n: 每次ab请求的次数。
        c: 并发请求数。
        t: 执行ab的次数。
        url: 压测的url,url必须是最后一个参数。
        使用方法:sh rps.sh -n 20000 -c 1000 -t 10 localhost/lua_io 
        结果:
                avg rps: 12552
                min rps: 11780
                max rps: 13324
        上代码:
#!/bin/sh

total_request=10000
concurrency=100
times=1

cmd_idx=1
param_count=$#
while [ $cmd_idx -lt $param_count ]
do
	cmd=$1
	shift 1	#remove $1
	case $cmd in
		-n)
			total_request=$1
			shift 1;;
		-c)
			concurrency=$1
			shift 1;;
		-t)
			times=$1
			shift 1;;
		*)
			echo "$cmd, support parameter: -n, -c, -t";;
	esac
	cmd_idx=`expr $cmd_idx + 2`	
done

url=$1
if [ $url = '' ]; then
	echo 'the test url must be provided...'
	exit 2
fi

echo "Total Request: $total_request, Concurrency: $concurrency, URL: $url, Times: $times"

ab_dir=/home/servers/httpd/httpd-2.2.21/bin
ab_cmd="$ab_dir/ab -n $total_request -c $concurrency $url"

echo $ab_cmd
idx=1
rps_sum=0
max=-1
min=99999999
while [ $idx -le $times ]
do
	echo "start loop $idx"
	result=`$ab_cmd | grep 'Requests per second:'`
	result=`echo $result | awk -F ' ' '{ print $4 }' | awk -F '.' '{ print $1 }'`
	rps_sum=`expr $result + $rps_sum`
	if [ $result -gt $max ]; then
		max=$result
	fi
	if [ $result -lt $min ]; then
		min=$result
	fi
	idx=`expr $idx + 1`
done
echo "avg rps: "`expr $rps_sum / $times`
echo "min rps: $min"
echo "max rps: $max"

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值