lunes, 19 de octubre de 2009

Medida de prestaciones (II). Script JMeter para Sakai

El script Sakai.jmx incluye las herramientas más comunes en un site de Sakai, aunque no todas. De todos modos, si observáis, el incluir una nueva en el script es bastante sencillo.
Os resumo algunos puntos importantes a la hora de utilizar este script:

  • Está generado con la versión 2.3.4 de JMeter, por lo que está garantizado el funcionamiento para versiones anteriores.

  • El scriptdir es el directorio en donde vais a guardar los ficheros a los que accederá JMeter. En este directorio se guardan los ficheros de usuarios (users_list.txt) y de contraseñas (pwd_list.txt). Para cada hilo de ejecución, JMeter extraerá un usuario y una contraseña de este fichero e intentará identificarse con esas credenciales.

  • No os olvidéis de configurar la dirección IP/nombre DNS del servidor, el puerto por el que recibe las peticiones así como el protocolo (HTTP/HTTPS) que está configurado.

  • Otro aspecto importante de este script es que debéis aseguraros de que los usuarios tienen configurado en sus preferencias de idioma, el mismo en el que especifiquéis los nombres de las herramientas en la sección “set variables”. En caso contrario, los patrones de extracción de las expresiones regulares no funcionarán y, por tanto, las partes del scripts implicadas tampoco.


Por favor, si alguien lo utiliza, le ruego que me envíe la configuración de su plataforma tecnológica y los resultados obtenidos con el script, con el fin de recopilar las experiencias y de que nos beneficiemos todos.

viernes, 2 de octubre de 2009

Medida de prestaciones (I)

En esta entrada aprenderemos algunos conceptos básicos de medidas de prestaciones utilizando la herramienta JMeter. En próximas semanas veremos cómo hacer un script básico con esta herramienta para Sakai y para Moodle.
Conceptos básicos sobre medida de prestaciones
El objetivo de las medidas de prestaciones es intentar predecir anticipadamente problemas de rendimiento y degradación de recursos del sistema antes de su paso a producción y facilitar su corrección. Dicho de manera muy simple resumida: se trata de encontrar la carga para la cual el tiempo de respuesta se dispara, es decir, se degradan las prestaciones del sistema.

Así pues, la utilidad de las medidas de prestaciones es tener una estimación de cómo se comportará el sistema en un entorno real bajo unas circunstancias dadas con el fin de, por ejemplo, ser capaces de dimensionar adecuadamente la plataforma. En definitiva, se persigue, por una parte, evaluar la entrega (¿cumple con lo que espera el cliente?; ¿Cómo se estima que funcione la aplicación en producción?) y, por otra, evaluar la infraestructura elegida (¿es adecuada para la capacidad que va a soportar?¿se producen cuellos de botella?
Un aspecto crítico para el éxito de las pruebas de prestaciones es tener claro qué se quiere medir y definir las baterías de pruebas más adecuadas para ello.
¿Qué es Jmeter?
Apache JMeter es una herramienta para realizar pruebas de rendimiento y pruebas funcionales sobre aplicaciones web en general. Es desarrollada por la ASF (Apache Software Foundation).
El Apache JMeter está diseñado para desarrollar diferentes tipos de test; permitiendo diseñar tanto sencillos teses que soliciten simples páginas web, como complejas secuencias de requisiciones que permitan evaluar el comportamiento de una aplicación o como la capacidad de carga máxima que pueda tener una aplicación en un servidor (pudiendo llegar a satura el servidor).
JMeter también permite la ejecución de pruebas distribuidas entre distintos ordenadores, para realizar pruebas de rendimiento.
El Apache JMeter incluye una interfaz gráfica de usuario que facilita el diseño de las pruebas. Esta interfaz gráfico además de aportar un entorno cómodo de trabajo, también permite guardar y alterar tanto los test desarrollados como los componentes que lo integran. Gracias a esto se pueden reutilizar las pruebas o módulos de las mismas en el desarrollo de nuevas pruebas.
Además, Apache JMeter también ofrece la posibilidad de activar un Proxy web, por lo que se puede grabar la navegación de un usuario para posteriormente usarla en la generación de una prueba.
Conceptos básicos
A continuación se ofrece una descripción muy resumida de los conceptos básicos que deben conocerse para trabajar con JMeter. Para un mayor nivel de detalle, remitimos al lector a la documentación de referencia.

  • ThreadGroup:

    • Es el punto de inicio de cualquier plan de pruebas. 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: número de usuarios. Cada thread ejecuta el plan de pruebas entero de forma independiente.

        • Ramp-up Period: Le indica a Jmeter el periodo de tiempo en que se llegará al nuúmero total de usuarios. Si son usados 10 threads y el ramp-up es de 100 seg, entonces Jmeter se tomará 100 segundos para crear y correr los 10 threads. Cada thread será creado 10 seg (100/10) después de la creación del Thread anterior.

        • Loop Count: Cantidad de veces que se correrá el plan de pruebas.

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


  • Samplers:

    • Indica cómo mandar las peticiones al servidor. Cada sampler tiene características diferentes y puede mejorarse agregando elementos de configuración (Configuration Elements ).

    • Los tipos de samplers son:

      • Controladores Lógicos: permiten configurar la lógica que Jmeter usa para decidir cuándo mandar una petición.

      • Los controladores lógicos son:

        • Timers: por defecto, los Thread de Jmeter mandan las peticiones continuamente. El agregado de timers dan la posibilidad de especificar el ‘Think Time’ para que las pruebas sean más 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 está 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 más usados son HTTP Cookie Manager, HTTP Request Default, User Defined Variables estre otras.

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

        • Post-Processor Element: ejecutan acciones después que un sampler realice un pedido. Comúnmente es utilizado para procesar los datos de respuesta o extraer información de ésta.


    Orden de Ejecución
    Los componentes de Jmeter se ejecutan con el siguiente orden de prioridad:

    1. Configuration elements

    2. Pre-Processors

    3. Timers

    4. Sampler

    5. Post-Processors

    6. Assertions

    7. Listeners


    Con estos conceptos básicos y el manual de referencia del JMeter, ya estamos en condiciones de empezar a hacer pruebas.
    En entradas sucesivas, estudiaremos un plan de pruebas para Sakai y para Moodle. Por supuesto, si alguno de vosotros tiene ya algún script hecho y quiere que lo comentemos, solamente tiene que adjuntarlo.