一、工具介绍
gor:监听服务器上的请求并捕捉HTTP流量,把捕捉的流量保存到文件中,最后到需要压测的机器上下载该文件,进行回放
二、监听(可以写个脚本):
1、前置脚本
[[ $# -ne 7 ]] && echo "sh $0; please use sh $0 build_vocab IP PASSWORD 80 'Search?=' 1000000000 300" && exit 1
# 如果没有sshpass,安装一个,此处默认已安装
SSH_PARAM="-o ConnectTimeout=30 -o ServerAliveInterval=60 -o ServerAliveCountMax=5"
SSHPASS_SCP="./sshpass -p$PASSWORD scp -o StrictHostKeyChecking=no $SSH_PARAM"
SSHPASS_SSH="./sshpass -p$PASSWORD ssh -o StrictHostKeyChecking=no $SSH_PARAM"
#需要监控的IP
IP=$1
#对应机器的密码
PASSWORD=$2
#监控的服务端口号
PORT=$3
#监控的数据文件名
filename=$4
#监控的接口关键字,为空,默认所有服务下的接口全监控
URL_REG=$5
#监控的文件大小
NEED_SIZE=$6
#监听多长时间的流量,单位为m
TIMEOUT=$7
$SSHPASS_SSH root@$IP "rm -rf /export/gor && mkdir -p /export/gor"
#将采集数据脚本press_vocab.s拷贝过去
$SSHPASS_SCP press_vocab.sh root@$IP:/export/gor
local filename="request.gor"
$SSHPASS_SSH root@$IP "cd /export/gor && bash press_vocab.sh $PORT $filename \"$ URL_REG\" $NEED_SIZE $TIMEOUT"
$SSHPASS_SCP root@$IP:/export/gor/$filename $filename
exit 0
2、press_vocab.sh :
function press_vocab()
{
[[ $# -ne 5 ]] && exit 1
#安装gor工具
wget https://github.com/buger/gor/releases/download/v0.12.1/gor_0.12.1_x64.tar.gz && tar xzvf gor_0.12.1_x64.tar.gz && cp gor /usr/local/bin
local port=$1
local filename=$2
local url_reg=$3
local need_size=$4
local timeout=$5
local extend_param="--http-set-param forcebot=1"
[[ $port -eq 12231 ]] && local extend_param="--http-set-param gateway_cmd=1"
[[ -n $url_regexp ]] && extend_param="$extend_param --http-allow-url $url_reg"
nohup ./gor --input-raw :$port --output-file $filename --output-file-append $extend_param &
local i=0
while [[ $i -lt $timeout ]]
do
((i++))
sleep 60
[[ ! -f $filename ]] && echo "no $filename" && break
[[ $need_size -eq 0 ]] && continue
file_size=`stat -c %s $filename`
[[ $file_size -gt $need_size ]] && break
done
killall -9 gor
}
press_vocab "$@"
exit 0
三、压测
在压测环境安装gor工具,然后将步骤二的$filename文件拷贝到需要压测机器上,然后执行压测,其中$PRESS_PERCENT为压测百分比,如2000%,即20倍;$DOMAIN可以是需要压测的域名或者ip+端口
1、nohup ./gor --input-file "$filename|$PRESS_PERCENT" --output-http"$DOMAIN" --input-file-loop 2>&1 &
2、屏蔽部分接口进行压测: nohup ./gor --input-file "$filename|$PRESS_PERCENT" --http-disallow-url "接口特性关键字" --output-http "$DOMAIN" --input-file-loop 2>&1 &
接下来就是根据监控看压测结果,或者自己写脚本统计压测结果