Como hacer pruebas de carga HTTP con Vegeta

Una de las tareas que mas he de realizar últimamente es la creación de Api web (REST) para comunicar distintos componentes entre ellos. Cuando los desarrollamos, hacemos algunos test unitarios y de integración, pero mas haya del rendimiento que ofrece la Api en nuestros entornos de desarrollo, no estábamos probando como rinden en situaciones de estrés. Y eso me tenía mosca. El otro día, vi por Twitter a alguien que mencionaba una herramienta llamada Vegeta, que sirve precisamente para hacer pruebas de carga HTTP.

Con esta necesidad que tenía y este nombre de proyecto, no hay duda que los astros se alinearon en ese Tweet.

Imagen relacionada

Vamos a ver en esta entrada como usar Vegeta para realizar pruebas de carga de nuestra API. “It’s over 9000!”

Lo primero de todo, aquí esta el proyecto con toda la información:

https://github.com/tsenart/vegeta

Para empezar a usarlo, puedes descargar el ejecutable (https://github.com/tsenart/vegeta/releases)

El siguiente paso es crear un fichero con la definición de la prueba que queremos realizar. En un simple .txt con las llamadas que deseamos realizar. En mi caso, voy a usar una API pública para esta entrada con datos del estudio Ghibli (https://ghibliapi.herokuapp.com/)

Para mi prueba voy a hacer varias llamadas al end-point de personas:

GET https://ghibliapi.herokuapp.com/people
GET https://ghibliapi.herokuapp.com/people/ba924631-068e-4436-b6de-f3283fa848f0
GET https://ghibliapi.herokuapp.com/people/8bccdc78-545b-49f4-a4c8-756163a38c91

Y ahora, el siguiente paso es… ATACAR!!

vegeta.exe attack -duration=5s -targets=targets.txt

Con el comando attack lanzamos la prueba de carga. Indicamos la duración del ataque y el fichero donde hemos definido los end-points.

Podemos indicar también el parámetro rate, que indica la tasa de solicitud por unidad de tiempo para emitir contra los objetivos. Si no indicamos nada, por defecto es 1s, y si especificamos 0 lanzara las peticiones tan rápido como pueda.

Haz la prueba y lanza ahora:

vegeta.exe attack -duration=5s -targets=targets.txt -rate=5

Hasta ahora todo bien, pero seguramente necesitarás datos de esta prueba, para ello, indicamos la salida del resultado del test con el parámetro output:

vegeta.exe attack -duration=5s -targets=targets.txt -rate=5 -output=resultado.bin

Esto vuelca todo el resultado en un fichero, que podemos usar para sacar una gráfica:

vegeta.exe plot -title=Resultado resultado.bin > resultados.html

Con esto ya tienes lo básico para empezar a lanzar pruebas de carga sobre tu API, y si necesitas más, desde su página en git esta todo muy documentado.

¡Nos leemos!

Deja un comentario

Tu dirección de correo electrónico no será publicada.