Repetir peticiones a un servidor web para tareas de testing

26 02 2014

Si estamos probando una nueva configuración en nuestra infraestructura y queremos comprobar si realmente soporta el mismo tráfico que lo que ya tenemos funcionando, la mejor opción es coger las mismas peticiones que hemos tenido y repetirlas contra nuestro objetivo manteniendo el mismo orden y concurrencia.

Lo primero es tener el log desde el que vamos a sacar el tráfico recibido, por ejemplo, extraer mediante un grep una hora completa:

# cat registro-peticiones.log | grep 'Feb 20 07' > una-hora-log.txt

Ahora toca separar la hora de la url para poder cambiar el formato de fecha a epoch, para ello dividimos el archivo en dos, uno sólo con horas y otro sólo con urls, luego les volveremos a juntar (quizá el awk o el cut se tenga que modificar según la condición de cada uno):

# cat una-hora-log.txt | awk -F" " '{print $1" "$2" "$3}' > hora-humana.txt
# cat una-hora-log.txt | cut -d\} -f 2 | cut -d\" -f 2 | cut -d" " -f2 > urls.txt

Lo que tiene que quedar en cada archivo es lo siguiente:
# cat hora-humana.txt
Feb 20 07:00:00
Feb 20 07:00:00
Feb 20 07:00:00
.
.
.

# cat urls.txt
/fotos/fld1/56174109.jpg
/fotos/fld1/26861829.png
/fotos/fld1/13928759.gif
.
.
.

Ahora toca cambiar la hora al formato epoch, para ello, con este script se puede hacer, guardarlo como script1.sh:

#!/bin/bash
F_TMP1="$1"
if [ ! -f ${F_TMP1} ]
then
echo "Archivo inválido"
echo "ejecutar: script1.sh /ruta/a/lista"
fi
while read line; do
# Si no es un comentario ni esta en blanco
if [[ ! "$line" == \#* ]] && [[ ! -z "$line" ]]; then
date --date="${line}" +%s
fi
done < ${F_TMP1}

Ahora se puede ejecutar para realizar el cambio de formato de hora:
# script1.sh hora-humana.txt > hora-epoch.txt

Quedando un archivo tal que así:
# cat hora-epoch.txt
1392876000
1392876000
1392876000
.
.
.

Ahora queda volver a juntar la hora con la url:
# paste hora-epoch.txt urls.txt > lista-a-procesar.txt

Ya tenemos la fuente desde la que vamos a ir haciendo peticiones, queda utilizar el siguiente script, llamado script2.sh, para empezar:

#!/bin/bash
F_TMP1="$1"
if [ ! -f ${F_TMP1} ]
then
echo "Archivo inválido"
echo "ejecutar: script2.sh /ruta/a/lista"
fi
DOMINIO='www.midominio.com'
EPO_AHORA=`date +%s`
EPO_PRIM_LINEA=`head -1 ${F_TMP1} | cut -d\/ -f1`
EPO_DIFER=`expr $EPO_AHORA - $EPO_PRIM_LINEA`
while read line; do
if [[ ! "$line" == \#* ]] && [[ ! -z "$line" ]]; then
EPO_LINEA=`echo ${line} | cut -d\/ -f 1`
EPO_QUETOCA=`expr $EPO_LINEA + $EPO_DIFER`
until [[ $EPO_QUETOCA -le $EPO_AHORA ]]; do
EPO_AHORA=`date +%s`
EPO_QUETOCA=`expr $EPO_LINEA + $EPO_DIFER`
sleep 0.1
done
URL=`echo ${line} | awk '{print $2}' | tr -d ' '`
echo "Procesando: ${DOMINIO}${URL}"
curl -s "http://${DOMINIO}${URL}" > /dev/null &
fi
done < ${F_TMP1}

Finalmente, ejecutar y listo:
# bash script2.sh lista-a-procesar.txt

Advertisements

Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: