Pruebas de stress con JMeter

Iniciado por ANTRAX, Noviembre 02, 2021, 10:26:37 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 02, 2021, 10:26:37 AM Ultima modificación: Enero 17, 2022, 10:02:15 AM por ANTRAX

Hace un tiempo escribí un post sobre como hacer pruebas de stress con JMeter, pero hace no mucho, lanzaron una actualización y ahora hay cosas que funcionan un poco diferentes.

Para comenzar, debemos descargar JMeter de su web oficial: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Debemos descargar la versión ZIP o TGZ del la sección de Binarios. Y tal como dice el requerimiento, debemos tener instalado Java 8 o superior.

Una vez descargado, debemos descomprimirlo. Para ejecutarlo, debemos entrar a la carpeta BIN y ejecutar el archivo llamado "jmeter.bat"


El motivo por el cual ejecuto el .bat y no el .jar, es porque el .bat abre una consola y esta abre el .jar. La consola sirve para que muestre el log de errores en caso de que algo falle en JMeter.

Agregaremos un nuevo grupo de hilos, para ello damos click derecho en nuestro test plan y luego vamos a ADD >> THREADS (USERS) >> THREAD GROUP


Este grupo de hilos contiene la información de cuantas veces vamos a querer que se ejecute una acción X. Es decir, indica cuantos usuarios vamos a simular que entran a una aplicación y cada cuanto tiempo.


En este ejemplo, vamos a ejecutar este hilo 100 veces (Number of Threads) al mismo tiempo (Ramp-up period) y esta repetición solo se va a efectura una sola vez (Loop Count)

Ahora vamos a agregar un HTTP Request, para indicarle a que URL debe hacerle esa cantidad de peticiones. Para ello damos click derecho en nuestro grupo de Hilos y vamos a: ADD >> SAMPLER >> HTTP REQUEST


Acá debemos prestar atención si es una petición de tipo GET o POST. En este caso haremos un GET al foro de Underc0de, por lo tanto completamos los siguientes campos: Protocol, Server Name, HTTP Request y Path.


En caso de ser un POST, deberíamos completar el body data con el JSON de la petición y las cabeceras con alguna Cookie, Token o lo que sea necesario para enviar dicho POST.

Por último, debemos agregar un Listener, que será el encargado de mostrarnos los resultados de la ejecución. Cabe aclarar que hay varios, cada uno para cosas distintas. Para este ejemplo voy a usar el más simple a modo de muestra. Para ello damos click derecho en el grupo de hilos y vamos a: ADD >> LISTENER >> VIEW RESULTS TREE


Lo único que resta, es clickear el ícono del PLAY de color verde y aguardar los resultados


Al finalizar la ejecución, podremos ver los resultados


Otro reporte muy útil y el cual recomiento agregar siempre, es el de "Sumary Report". Este reporte muestra de forma ordenada un poco más de información acerca de la ejecución y también cual es el porcentaje de error que arroja dicha prueba


Ahora que ya sabemos usar JMeter y ver los resultados de la ejecución, vamos a proceder a testear stress. Para esto, debemos ver cuantos usuarios soporta el foro al mismo tiempo. Esto se configura en nuestro Thread Group, incrementando el numero de usuario que entrarían al mismo tiempo hasta que comience a fallar.


En este caso, lo que hice fue aumentarlo de 100 a 200 y seguía funcionando bien, luego de 200 a 300 y falló, y lo bajé a 275 y tiró un 2.55% de error. Por lo que se puede concluir de que el foro de Underc0de soporta 270 usuarios entrando al mismo tiempo.

Al revisar el View Results Tree y analizar alguna petición fallida, pude ver de que los errores que arrojó, vienen de CloudFlare


Cloudflare es una especie de protección entre el usuario que intenta ingresar y el servidor. Al detectar que yo estoy enviando muchas peticiones al mismo tiempo, este me bannea. Es por ello que puede que este tirando error al pasar las 270 peticiones.

Lo más probable es que el servidor de Underc0de soporte más, pero Cloudflare lo frena. Para poder hacer más real la prueba, habría que desactivarlo mientras se prueba el stress en este sitio para determinar cuanta es la cantidad de usuarios real que soporta.

Algunas cosas a tener en cuenta al momento de probar stress

– Estas pruebas NO deben realizarse en producción
– Se debe ejecutar esta prueba en el flujo más pesado de la aplicación. En este caso apunté al inicio del foro, pero quizas lo correcto hubiese sido apuntar a una petición POST a la hora de crear un post, ya que debe ir y almacenar las cosas en la base de datos.
– Estas pruebas se realizan en un ambiente espejo a producción. Es decir, No se deben hacer ni en producción, ni en un servidor de QA o Desarrollo. Debe ser otro ambiente que tenga las mismas características que producción. De lo contrario, los datos que obtendremos no serán datos que escenarios que pasarán en producción.
- Al momento de hacer esta prueba, nadie debería estar conectado en ese ambiente para no afectar los resultados de las pruebas

Esto es todo por ahora! nos leemos en el próximo post!
ANTRAX


Buenas!
En el dia de la fecha repetí tus pasos y llegue a 800 usuarios con 1.88% de error. Además no me figura cloudflare.
muchas gracias por los aportes!

Todo suma para el.testeo muchas gracias por el aporte

Muy lindo post.
Yo realice la prueba y me arrojo un numero alto de usuario para que recién me diera error y en los https con error no me marco en los response headers el error cloudflare

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy lindo post.
Yo realice la prueba y me arrojo un numero alto de usuario para que recién me diera error y en los https con error no me marco en los response headers el error cloudflare

Intenten probar con una página que no sea la de Underc0de! jajaja



en el caso que se tenga que hacer una prueba pero la url tiene el siguiente formato (por ejemplo) No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  (query params si no me equivoco se llama asi)

esos parámetros se agregan en el "HTTP Request", en esa ventana hay un boton añadir y escriben los paramentros que sean necesarios, y cuando lo ejecuten en el "árbol de resultados" hay una pestaña que muestra que url esta tomando ("PETICION") y deberia salir con este formato No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, cada elemento que agreguen es un "&" en la url

justo lo que buscaba muchas graciaaas