Intro a JMeter: Prueba de Carga para un Web API

Una de las cosas más importantes al momento de desarrollar una Web API es saber cuántos recursos vamos a necesitar, esto se basa en la cantidad de tráfico que vamos (o esperamos) recibir, el tiempo de respuesta del API y el temaño de la respuesta. Y cuando menciono los recursos, estoy hablando de cuan grande / pequeño el servidor debe ser, lo bueno de ahora es que tenemos la nube, donde podemos experimentar en cuestión de minutos y con un par de clicks. Pero hoy, no voy hablar sobre la nube, voy a enfocarme en cómo preparar nuestro sitio ambiente local para ejecutar una prueba de carga en nuestras máquinas.

¿Que vas a necesitar?

Primero lo primero, vamos a necesitar una API para probar, para esto vamos a crear una muy simple, en realidad vamos a usar la plantilla de VS. Podemos hacerlo por asi: 1. Abra su Visual Studio (2015 o superior) 2. En el panel izquierdo, elija: "Visual C#" y luego ".NET Core" 3. En el medio, elija: "Create a new ASP.NET Core Web Application (.NET Core) 4. Pon un nombre a tu proyecto (yo puse "HelloWorld") 5. Elige una ubicación para guardar los archivos de todos los proyectos 6. Haz clic en "OK"

Fácil, ¿verdad? Aquí está una imagen de lo que veo:

Crear un Web API con .NET Core

Ahora, necesitas descargar JMeter (necesitarás Java para ejecutarlo) aquí: http://jmeter.apache.org/download_jmeter.cgi. Extraelo y ve a la carpeta bin, encontrarás un archivo llamado: "ApacheJMeter.jar", ejecútelo y la interfaz grafica aparecera.

JMeter

Ok, ahora ya estamos listos, empezemos con lo bueno.

¿Cómo crear mi primer prueba de carga?

Es muy fácil y lo vamos a hacer en unos pocos pasos, al final voy a compartir el enlace de la configuración xml de la prueba, empezemos:

  1. Abre JMeter (supongo que ya lo hiciste después de descargarlo en el paso anterior)

  2. Haz clic con el botón derecho en "Test Plan" y luego ve a Add -> Threads (Users) -> Thread Group. Aquí es donde vas a configurar los usuarios que JMeter va lanzar, pongamos 10 en "Number of Threads (users)" para simular 10 usuarios simultáneos. También se puede configurar cuánto tiempo la prueba se ejecutará, checkea donde dice "Scheduler" y en este caso pondremos 30 en "Duration (seconds)" para que la prueba de carga corra durante 30 segundos.

  3. JMeter intentará enviar tanta carga como pueda, así que necesitamos poner algo para asegurar un rendimiento constante a la API, para esto haz click de nuevo en "Test Plan" y luego en Add -> Timer -> Constan Throughput Timer. Este es el número máximo de solicitudes que enviará en un minuto, ya configuramos la prueba para 10 usuarios y supongamos que envia 10 peticiones por segundo (rps), en un minuto enviará 600 peticiones, por lo tanto ponemos 600 en "Target throughput (in samples per minute)".

  4. Necesitamos algo para probar, una URL. Así que vamos a ejecutar la API en Visual     Studio (VS) en modo de debug por ahora y dejar que VS la levante con IIS Express, este le asignara un puerto así que aseguremonos de tenerlo a la mano.

  5. Volvamos a JMeter y en "Thread Group" haz clic derecho y ve a Add -> Sampler -> HTTP Request. Ahora podemos configurar la URL, en "Server Name or IP" ponemos "localhost" (aqui iria el dominio o la IP del servidor). Pongamos el número de puerto en donde IIS levanto el API, en mi caso fue 62029, así que puse ese número     en el campo "Port Number". También es necesario especificar la ruta de la API para probar,     esto lo hacemos especificandolo en el campo "Path", en mi caso puse "/api/filelog"     porque esa elra la URL. También podemos configurar parámetros de la URL, pero vamos a dejar este ejemplo tan simple como sea posible.

  6. Lo bueno de JMeter es que puedes ver algunas salidas mientras la prueba     se está ejecutando, así que vamos a añadir algunas. En "Thread Group", haz clic con el botón derecho y ve a Add -> Listener -> Aggregate Report. Con esto podemos ver el     número de peticiones en total (requests), la latencia media en milisegundos (ms),     la mediana de la latencia, la latencia del percentil 90, la del 95 y la del 99     (esto es por que los promedios no dicen mucho), latencia mínima, latencia máxima,     porcentaje de solicitudes con errores del total enviado, el trafico en requests por segundo (rps),     datos recibidos y enviados en total (payload).

  7. También podemos agregar un gráfico de tiempo de respuesta a la prueba, para ello vamos a "Thread     Grup", haz clic derecho y ve a Add -> Listener -> Response Time Graph. Asi que,     cuando se ejecute la prueba de carga, podemos ver una gráfica de cómo la latencia se va comportando.

  8. Bueno, ya estás listo, así que vamos a ejecutar la prueba en el menú "Run" (Alt + R) y luego clic en "Start"

Como puedes ver, en ocho pasos hemos podido crear una simple prueba de carga con JMeter, así que ahora practica agregar más salidas (Listeners) y a seguir jugando con la configuración, agrega más usuarios a la prueba y ve cómo se comporta tu API, podrías encontrar cosas bastante interesantes.

Aquí está la pantalla final de cómo debería verse parte de la cofiguracion:

JMeter

Puedes descargar el archivo de configuración aquí, diviértete!