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.
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!