Testing de Performance Conceptos, Documentos y herramientas Por Jose Pablo Sarco
Agenda Conceptos Por qué hacer pruebas de Performance? Beneficios en cada tipo de test Documentación Metodología Performance Test Plan Reporte Final de Performance Conceptos importante Buenas Practicas Herramientas Comparativa Jmeter Conceptos Básicos Creación Manual de Test Plan Grabación de Test Plan Bad Boy Jmeter Recolección de Resultados Links de Interés y preguntas
Conceptos Performance Enfocadas en " Cuánto?" y " Qué tan rápido?". La evaluación apunta a medir si se cumplen los requerimientos establecidos por el cliente. Suelen llevarse a cabo en conjunción con stress testing. Objetivo: predecir anticipadamente problemas de rendimiento y degradación de recursos del sistema antes de su paso a producción, y facilitar su corrección.
Conceptos Performance Remote Network Tema 1 1 2 3 4 Virtual Testers Local Server Host
Por qué hacer pruebas de Performance? Conceptos Scott Barber: Para determinar o estimar varias características de performance bajo varias condiciones Se hace para tener un estimativo de cómo puede llegar a responder la aplicación en el ambiente de producción (es imposible saber exactamente como va a responder, ya que nunca se tienen los datos o el equipamiento necesario) Para saber si alcanza las expectativas de performance del cliente, es decir, la única meta es darle valor agregado al usuario final. Técnicamente, se obtiene la siguiente información: Evaluar la entrega: Cumple con lo que espera el cliente?; Cómo se estima que funcione la aplicación en producción? Evaluar la infraestructura elegida: Es adecuada para la capacidad que va a soportar?; Se comparo con otras tecnologías?; Se producen cuellos de botella?
Conceptos Load Testing Se centra en " Cuánto?" puede manejar la aplicación. La idea de estas pruebas es poner al límite de las especificaciones la cantidad de usuarios simultáneos en la aplicación y acercarse lo mas posible a como va a reaccionar la aplicación en el mundo real. Existen dos ramas: Longevity testing: Evaluar la estabilidad del sistema para manejar una constante carga de trabajo durante un periodo extenso. Volume Testing: Poner al sistema al limite de carga de trabajo durante un periodo corto. Stress Testing Recoge diversos resultados en materia de mediciones sobre diversos modelos de carga y actividades que son más "estresantes" de lo que la aplicación va a utilizar a la hora de entregarse a los verdaderos usuarios (excede las especificaciones). Nos indica como va a reaccionar el sistema cuando este pasa su limite de funcionamiento.
Beneficios en cada tipo de Test Test Performanc e Prueba de Carga Beneficios Determina las características de velocidad, escalabilidad y estabilidad de una aplicación. Se enfoca en determinar si el usuario del sistema va a estar satisfecho con las características de performance de la aplicación. Identificar coincidencias entre las expectativas de performance y la realidad Soporta tunning,, capacidad de planeamiento y optimización n del trabajo. Determina el throughput requerido para soportar anticipadamente los picos en producción Determina si el hardware del ambiente es adecuado Determina si el Load Balancer es adecuado Detecta problemas de concurrencia Detecta errores funcionales durante la carga Ayuda a determinar cuantos usuarios puede manejar la aplicación n antes que la performance se vea afectada. Retos y puntos que no tiene en cuenta Puede no detectar algunos errores funcionales que solo aparecen en las pruebas de carga. Si no es diseñado y validado correctamente, puede arrojar resultados muy poco significativos a lo que ocurrirá en producción. A A menos que las pruebas se realicen en el ambiente de producción, desde las mismas maquinas de los usuarios finales, siempre habrá un grado de incertidumbre en los resultados. No esta diseñado para enfocarse primordialmente en la velocidad de respuesta Los resultados pueden ser usados únicamente para compara con otras pruebas de carga
Beneficios en cada tipo de Test Test Stress Beneficios Determinar si la información n se corrompe cuando la aplicación n se lleva mas allá de sus limites. Determinar un estimativo de cuan lejos (antes de ocasionar errores y lentitud) puede llegar una aplicación n llevando al limite el objetivo de carga. Ayuda a determinar que clase de fallas son mas importantes para manejar. Retos y puntos que no tiene en cuenta Como las pruebas de stress son irreales, los usuarios finales pueden no considerar los resultados. Es difícil determinar cuanto stress es necesario aplicar en la aplicación. Puede ocasionar grande fallas en la aplicación n y la red.
Documentación Metodología Relevamiento Planificación Construcción Ejecución Análisis
Metodología Documentación Planificación: Tiene como objetivo la correcta caracterización de la carga de trabajo. Obtención de requisitos. Elección de las métricas adecuadas. Elección del tipo de pruebas. Descripción del sistema a probar. Caracterización de la carga de trabajo. Construcción: Tiene como Objetivo la Construcción de los Test Scripts y la configuración del ambiente de pruebas. Definición de Escenarios Distribución de tareas Coordinación con encargados de Servidor de Pruebas
Metodología Documentación Ejecución: Tiene como objetivo correr los Test Scripts desarrollados en la etapa de construcción. Dependiendo del tamaño del proyecto puede ocurrir 1 o varias veces. Se registran las fecha y hora de ejecución Análisis: Tiene como Objetivo recabar toda la información generada por las pruebas, procesarla de manera que se pueda interpretar, sacar conclusiones y proponer recomendaciones de cambio. Recopilación de Resultados Foco en métricas mas significativas Definición de gráficos mas adecuados para mostrar la información Proponer recomendaciones en función de los resultados obtenidos
Conceptos importantes Average (Promedio): matemáticamente se refiere a al promedio del juego de datos. Es una medida que por si sola dice muy poco sobre lo resultados, pero nos da una idea de cual es el comportamiento general de la aplicación. Median (Mediana): Simplemente es el valor medio del juego de datos cuando estos son ordenados de menor a mayor. En los casos en que la cantidad de datos es par, se toman los dos valores centrales y se saca el promedio de estos. Standard Deviation (Desvió Standard): Es la cantidad de diferencia dentro del juego de datos que abarca la parte superior de aproximadamente el 68 % de todas las mediciones en el juego de datos. Esto significa que mientras mas grande es este numero menos coherente son los resultados obtenidos. Una norma utilizada para esta métrica es: Los datos con una desviación estándar superior a la mitad de su media debe ser tratada como sospechosa. Si es exactamente ese valor, el juego de datos no tiene una distribución normal. Throughput (Rendimiento): Es la tasa promedio de mensajes entregados satisfactoriamente. Comúnmente se mide en bits por segundos (bps). Latency (Latencia): Tiempo necesario para reunir la solicitud y el montaje de la respuesta. 90% Line: Es el valor por debajo del cual el 90% de las muestras fallan.
Buenas practicas Tener objetivos y métricas claras y con la aprobación del cliente Idealmente esto debería ser parte fundamental del proceso de Performance Testing, ya que sin un objetivo claro para cumplir, el proceso se vuelve un camino sin fin que puede dejar insatisfecho al usuario final en cuanto a la Performance de la aplicación si sus expectativas no fueron correctamente contabilizadas. No olvidarse de la base de datos Para aplicaciones web transaccionales las métricas mas comunes son numero de usuarios concurrentes y tiempo de respuesta. Sin embargo, un solo usuario con todo el sistema para él puede experimentar un rendimiento diferente, dependiendo de la cantidad de datos que existan en la base de datos. Por lo tanto, los requerimientos de performance deben incluir métricas para el tamaño de base de datos esperado y ese tamaño debe ser reproducido en el ambiente de pruebas. Identificar los CU críticos Los CU críticos son aquellos donde es necesaria una rápida respuesta a la vista del usuario final o aquellos para los cuales hay un riesgo de performance. Otra cosa a considerar es que no es necesario probar demasiado caminos no muy frecuentes, pero debe asegurarse que cumplan con los requerimientos las pocas veces que son llamadas. Finalmente, por cada caso de uso critico debemos poner foco en los escenarios que son ejecutados mas frecuentemente y son críticos para la percepción del usuario final sobre la performance de la aplicación.
Herramientas Comerciales Excelentes opciones en GUI Muchos tutoriales y ejemplos Mayor análisis de resultados Open Source A montones (Debe haber cerca de 20 aprox) Se encuentra mucha ayuda en los grupos de mails Son Gratis Muy Flexibles y livianas Desarrollo Propio Para aplicar en tecnología demasiado nueva Costosas Contras Poco flexibles y pesadas Contras A veces faltan tutoriales y ejemplos Depende mucho del grado de avance en que se encuentre Poco análisis de resultados Contras Solo si se planea seguir mejorando y adaptando a otras tecnologías Flexibles
Herramientas Comparativa Criterio de Evaluación Descripción OpenSTA Apache JMeter WebLoad LoadRunner Protocols Los protocolos de comunicación n que pueden ser capturados, manipulados y simulados por la aplicación HTTP 1.0 / 1.1 / HTTPS (SSL), SOAP/XML HTTP,FTP, SOAP/XML- RPC,JDBC HTTP/S, WAP, AJAX, ActiveX, Java, Web services.. Es posible grabar scripts con multi protocolo Soporta muchos. Los protocolos son cargados por ítem. Tiene una opción n de grabación n por multi-protocolo Playback functions Ejecución n de los scripts y facilidades de debug los scripts Vista extendida del log donde se ven los calores de los parámetros y los mensajes del servidor. Es una herramienta GUI. Entonces hay muchos GUI Listeners, los cuales son usados para capturar la grabación n y replicar los mensajes. Vista extendida del log.. El cual muestra los pedidos y los datos de respuesta. Vista extendida del log donde se ven los valores de los parámetros y los mensajes del servidor. También n permite ver y comparar la versión n grabada de la pagina y los mensajes del servidor. Tiene una opción n para hacer debug en el generador de scripts. Parametrización Cambio dinámico de valores para variables pasadas desde el cliente al servidor durante el POST para asegurar una simulación n mas real del comportamiento del usuario. Gran cantidad de facilidades para data entry, incluyendo interfaces Wizard para generar automáticament ticament e datos de prueba. La parametrizació n se puede hacer por interfaz, en el control Users Parameters. Gran cantidad de facilidades para data entry, incluyendo interfaces Wizard para generar automáticamente ticamente datos de prueba. Gran cantidad de facilidades para data entry,, incluyendo interfaces Wizard para generar automáticamente ticamente datos de prueba.
Herramientas Comparativa Criterio de Evaluación Descripción OpenSTA Apache JMeter WebLoad LoadRunner Simulación de la velocidad de conexión n de los usuarios Habilidad de emular las diferentes velocidades de la red que pueden ser utilizadas por los usuarios No lo permite. No lo permite. Pero puede programarse en JAVA No lo permite en la version Open Source Puede emular diferentes velocidades de la red durante la ejecución. Reportes y análisis Facilidades para examinar e investigar los resultados de las pruebas incluyendo contadores y recursos monitoreados. Gráficos simples y suficientes como para analizar los resultados de carga y uso de recursos. Los gráficos pueden ser exportados a Excel. Puede crear gráficos pero no reportes. WebLOAD Console muestra reportes online de las sesiones que están n corriendo. El usuario puede crear sus propias vistas de las estadísticas sticas que estos reportes muestran. Se puede ir cambiando de reportes gráficos o textuales (Tablas) Posee una gran cantidad de gráficos sofisticados con muchísimas facilidades. Genera repotes automáticos ticos en Word. Se pueden obtener reportes por cada usuario simulado. Extensibilida d La habilidad de incrementar la funcionalidad de la herramienta. Pueden escribirse módulos en SCL. Además al ser OpenSource van Funciones Beanshell/JA VA pueden ser definidas y ser usadas como plug-in Permite agregar objetos Java, ActiveX o COM en los test Scripts. El framework de WebLoad es flexible y facilita la Librerías adicionales en TSL o C, limitado por las capacidades funcionales de la herramienta.
Jmeter Conceptos básicos Qué es Jmeter? Es una herramienta Java la cual fue diseñada para hacer pruebas de carga en aplicaciones Web, pero se expandió a otras funciones. Típicamente es usada para medir Performance y Pruebas de carga, es una herramienta OpenSource.
Jmeter Conceptos básicos Cómo Funciona?
Jmeter Conceptos básicos ThreadGroup Es el punto de inicio de cualquier Test Plan. Todos los controles y samplers deben estar debajo del ThreadGroup. Otros elementos, como Listeners, pueden estar en la misma jerarquía. Controla el numero de threads (Usuarios virtuales) que se usaran en la ejecución de las pruebas. Las opciones que tiene son: Number of threads: Cantidad de usuarios. Cada thread ejecuta el Test Plan entero en forma independiente. Ramp-up Period: Le indica a Jmeter el periodo de tiempo en que se llegara al numero total de usuarios. Si son usados 10 threads y el ramp-up es de 100 seg, entonces Jmeter se tomara 100 segundos para crear y correr los 10 threads. Cada thread sera creado 10 seg (100/10) después de la creación del Thread anterior. Loop Count: Cantidad de veces que se correrá el Test Plan. Scheduler: Brinda mas opciones a la ejecución de las pruebas. Podemos agregar la hora de comienzo y la hora de fin, los campos Duración y Delay reemplazan a los dos anteriores.
Jmeter Conceptos básicos Samplers Le indica a Jmeter como mandar los pedidos al servidor. Cada sampler tiene características diferentes y puede mejorarse agregando elementos de configuración(configuration Elements ). Los tipos de samplers son:
Jmeter Conceptos básicos Controladores Lógicos Permite configurar la lógica que Jmeter usa para decidir cuando mandar un request. Los controladores lógicos son:
Jmeter Conceptos básicos Timers Por default los Thread de Jmeter mandan los pedidos sin pausa. El agregado de timers dan la posibilidad de especificar el Think Time para que las pruebas sean mas reales. Hay diferentes tipos según la necesidad del escenario de pruebas. Assertions Permiten validar hechos (sucesos) acerca de las respuestas del servidor en la ejecución de las pruebas. Usando assertions se puede testear que la aplicación esta funcionando correctamente, recibiendo las respuestas esperadas del servidor. Pueden ser agregados a cualquier sampler. Configuration Elements Trabajan junto a los samplers. Si bien no mandan pedidos, pueden agregar a o modificar los pedidos. Los mas usados son HTTP Cookie Manager, HTTP Request Default, User Defined Variables estre otras
Jmeter Conceptos básicos Pre-Processor Element Ejecutan acciones antes que un sampler realice un pedido. Comúnmente es utilizado para modificar la configuración del sampler justo antas que se ejecute o para actualizar variables que no son extraídas del texto de respuesta. El mas utilizado es el HTTP URL Re-writing Modifier para el manejo de sesiones de usuario. Post-Processor Element Ejecutan acciones despues que un sampler realice un pedido. Comúnmente es utilizado para procesar los datos de respuesta o extraer información de esta. El mas utilizado es el Regular Expression Extractor para extraer los valores de ciertos tags del HTML. Orden de Ejecución Los componentes de Jmeter se ejecutan con el siguiente orden de prioridad: Configuration elements Pre-Processors Timers Sampler Post-Processors Assertions Listeners
Links de Interés Performance http://www.sqaforums.com/postlist.php?board=ubb2 http://www.perftestplus.com http://searchsoftwarequality.techtarget.com/topics/0,295493,sid92_tax306129,00.ht ml http://www.logigear.com/resources/article_links_-_test_types/load_performance.asp http://members.tripod.com/~bazman/loadtest.html?button9=load+testing+of+we bsites Jmeter Pagina oficial: http://jakarta.apache.org/jmeter/ Bad Boy: http://www.badboy.com.au/ Otras: http://vamshisomanchi.wordpress.com/2008/04/28/jmeter-stress-testing/ http://www.javaworld.com/javaworld/jw-07-2005/jw-0711-jmeter.html?page=1 http://www.osmosislatina.com/jmeter/basico.htm (en español) http://www.sqaforums.com/postlist.php?cat=0&board=ubb54&page=1
Muchas Gracias!!!! Jose Pablo Sarco sarcojp@hotmail.com