Expositores: Federico Orihuela y Rodrigo Quinta
Duración: 2 horas
Resumen: ¿Cómo saber si el sistema soporta la cantidad de usuarios esperada? ¿Qué infraestructura necesitamos para desplegar el sistema? En este taller te ayudamos a responder esas preguntas mediante la ejecución de pruebas de performance utilizando JMeter. La performance de los sistemas es cada día más relevante para los diferentes actores, lo que lleva a una creciente necesidad de ejecutar este tipo de pruebas, que permiten estudiar el comportamiento, la escalabilidad y la confiabilidad de los sistemas.
1. @ces_com_uy | #testinguy
TALLER
Rodrigo Quinta
rquinta@ces.com.uy
Federico Orihuela
forihuela@ces.com.uy
13 y 14 de mayo, 2019
testinguy.org
@testinguy | #testinguy
¡Estresá el sistema, no
al usuario!
2. @ces_com_uy | #testinguy
Introducción
•Objetivos de las pruebas de performance
• Estudiar el comportamiento del sistema bajo ciertas condiciones
•Tipos de pruebas de performance
• Stress
• Load
• Scalability
• Otras ...
3. @ces_com_uy | #testinguy
Definir y modelo la realidad
•Antes de comenzar con las pruebas de performance es necesario
establecer un modelo para la realidad que se desea probar.
•Hay que definir funcionalidades a probar.
•Cantidad de usuarios que se quieren simular.
•Acciones que hacen los usuarios.
•Definir momentos de uso pico.
•Considerar otros factores que puedan afectar el desempeño del
sistema.
•Imitar la realidad puede ser complejo, por lo que seguramente sea
necesario hacer simplificaciones.
12. @ces_com_uy | #testinguy
Grupo de hilos
•Número de Hilos
• Este parámetro indica la cantidad de hilos que ejecutarán el flujo.
• Cada hilo se ejecuta de forma independiente.
• En general cada hilo representa un usuario.
•Ramp Up
• Este parámetro indica al jmeter el tiempo necesario para que todos los hilos
inicien su trabajo.
• Si tenemos 5 hilos y 10s de ramp up, ingresará un hilo cada 2s.
•Iteraciones
• Indica la cantidad de veces que un hilo (usuario) realizará la tarea indicada.
• Por ejemplo, si tenemos la tarea enviar correo, tenemos 5 hilos y 4
iteraciones se enviarán 20 correos (4 por cada hilo).
13. @ces_com_uy | #testinguy
Samplers (o Muestreadores)
•Permiten hacer un pedido y esperar por una respuesta.
•Se pueden hacer pedidos de distintos tipos (HTTP, FTP, JDBC,
custom).
•Lo más común (en el testing de aplicaciones Web) es usar samplers
de tipo “HTTP Request”. En este caso cada petición HTTP se mapea a
un sampler.
•El “Debug Sampler”, permite ver valores de variables o propiedades
de Jmeter.
14. @ces_com_uy | #testinguy
Controllers (Controladores)
• Permiten agrupar peticiones (samplers), así como introducir lógica
para personalizar el comportamiento de la aplicación.
• Ejemplos
• Simple Controller (Sirve para agrupar lógicamente)
• Transaction Controller (Sirve para medir el tiempo de lo que contiene)
• Only Once Controller (Solo ejecuta una vez durante la prueba)
• If Controller (Ejecuta dependiendo de una condición)
• Loop Controller (Ejecuta varias veces)
• Include Controller (Permite modularizar importando elementos externos)
15. @ces_com_uy | #testinguy
• Permiten manejar información general de los pedidos.
• Ejemplos
• HTTP Cookie Manager (Sirve para administrar las cookies)
• HTTP Requests Defaults (Sirve para manejar datos genéricos de los pedidos)
Managers (Manejadores)
17. @ces_com_uy | #testinguy
Thinktimes
• Es el tiempo que transcurre desde que se completó un pedido y el
inicio del siguiente.
• Representa el tiempo que demora el usuario en leer, llenar campos,
hacer el siguiente click, etc.
•Como agregarlos?
• Timers - Cuidado con el alcance (scope). Por lo general hay que ponerlos a
nivel de pedidos para que se comporte como queremos.
• Test Actions - Se puede poner entre pedidos. Se puede hacer opcional si se
pone dentro de un controlador If (útil para desarrollo y testing).
18. @ces_com_uy | #testinguy
Parametrizar
•Variables
• Se pueden definir variables que son locales a cada hilo (usuario).
• Se pueden cargar desde elementos de configuración como (CSV data set
config).
• Se pueden cargar en pre/post-processors.
• Se pueden cargar desde funciones.
• Para usarlas -> ${NOMBRE_VARIABLE}
•Funciones
• Las funciones preexistentes permiten realizar tareas sobre parámetros de
entrada (o no) y obtener resultados.
• Sumar dos números y guardar el resultado en MYVAR
${__intSum(2,5,MYVAR)}
• Obtener un número aleatorio entre 0 y 10 ${__Random(0,10)}
19. @ces_com_uy | #testinguy
Aserciones (Assertions)
•Las aserciones, buscan asegurar que el resultado que obtenemos de
un sampler es como debería.
•Usando una aserción se puede “testear” que se devuelve un
resultado correcto o que no se devuelve ningún error.
•Ejemplos
• Response Assertion
• Duration Assertion
• Size Assertion
• Beanshell (JSR223) Assertion
• HTML Assertion
20. @ces_com_uy | #testinguy
Procesadores (Processors)
•Pre-Processors
• Permiten realizar alguna acción antes de un pedido.
• Son útiles para “cargar” o modificar valores en el pedido que se hará.
•Post-Processors
• Permiten realizar acciones luego de un pedido, por lo general se procesa el
resultado y se extraen valores que se usarán en otros pedidos.
•Ejemplos
• RegEx Extractor (Post-processor)
• JSON/Xpath Extractor (Post-processor)
• Beanshell/JSR223 (Pre-processor y Post-processor)
21. @ces_com_uy | #testinguy
Regex extractor
• Permite extraer patrones de expresiones regulares y guardar el
resultado en una o varias variables.
• Expresiones regulares
• Permite buscar patrones determinados por la expresión regular.
• Además se puede seleccionar parte del patrón encerrando la expresión
deseada entre paréntesis “(”,”)”.
• Son útiles tanto en el regex extractor como en aserciones.
22. @ces_com_uy | #testinguy
Guardando y Visualizando Resultados
•En una prueba de carga, por lo general no interesa ver los resultados
uno a uno, sino un resumen o gráfica de los mismos.
•Para guardar y visualizar resultados, se cuenta con los listeners, los
que permiten guardar resultados en un archivo y a su vez, la mayoría
permiten visualizar los resultados de alguna forma.
•Ejemplos
• View Result Tree (solo para debug)
• Summary Report
• Graph Results
• Existen plugins que también son útiles
23. @ces_com_uy | #testinguy
Tips
•Usar la menor cantidad de Listeners posible
•Apagar las gráficas/gui durante la ejecución.
•Si es necesario ver gráficas de resultados durante la ejecución,
cargarlo en un sistema externo (ELK Stack, TIG Stack, Jmeter externo)
•Agrandar el heap de la JVM en jmeter.bat/jmeter.sh
• -Xms para setear el heap mínimo.
• -Xmx para setear el heap máximo.
• Se recomienda que coincidan los valores para mejor desempeño.