Grabación de un Script Web Básico

JMeter genera carga para una aplicación Web a través de múltiples llamados HTTP, JMeter no simula un navegador, por tanto ciertas características de las páginas Web no pueden ser ejecutadas, por ejemplo JavaScript, Applets de Java, animaciones o aplicaciones que usen Flash y en general cualquier funcionalidad que requiera la ejecución de algún componente en el cliente.
Esta característica puede limitar en ciertos contextos la herramienta pero también trae algunas ventajas como darle al cliente mayor capacidad de generación de carga al no tener que cargar la interfaz de un navegador.

Dicho esto, los scripts Web pueden ser generados como peticiones HTTP manualmente, es decir, ingresar la URL, el puerto, los valores que van con la petición, el métodod de llamado (GET, POST), entre otros. Para un escenario que tenga unas pocas peticiones esto puede servir, pero en general la mejor opción es usar una funcionalidad que ofrece JMeter donde éste se establece como un proxy para el navegador Web que va grabando peticiones a medida que navegamos en la aplicación. Digo que esta es la mejor opciones básicamente por dos razones:

  • Generar manualmente un script largo puede llegar a ser un proceso supremamente tedioso y complejo y la verdad, es que en la mayoría de los casos nos enfrentaremos a este tipo de escenarios.
  • Conocer los detalles de la navegación HTTP de cualquier aplicación no siempre es fácil así que la creación de peticiones manuales no siempre va a ser obvia o sencilla. Por ejemplo para este taller escogí una aplicación hecha con JavaServer Faces porque ofrece un par de retos a la hora de grabar un script, estos retos o detalles adicionales se pueden conocer fácilmente grabando un script con la funcionalidad de proxy.

Para grabar un script usando JMeter como proxy, inicie la aplicación ejecutando el archivo %JMETER_HOME%\bin\jmeter.bat. La interfaz de JMeter luce como muestra la siguiente imagen:

Grabación de un script Web

1. Haga clic derecho sobre el nodo "Plan de Pruebas" y agregue el elemento "Grupo de Hilos".

Grabación de un script Web

2. Seleccione ahora el nodo "Grupo de Hilos" y con clic derecho agregue el elemento "Controlador Simple".

Grabación de un script Web

3. Haga clic en el nodo "Banco de Trabajo" y agregue el elemento "Servidor Proxy HTTP".

Grabación de un script Web

4. En la pantalla del servidor proxy (la puede acceder seleccionando el elemento "Servidor proxy HTTP") cambie el controlador objetivo y seleccione "Grupo de Hilos > Controlador Simple". Tome nota del puerto que tiene configurado el proxy y use uno que esté libre. Si el Tomcat donde está desplegada la aplicación usa también el puerto 8080, ingrese otro, por ejemplo 8888.

Grabación de un script Web

5. Inicie el proxy presionando el botón "Arrancar":

Grabación de un script Web

6. Vaya a su navegador y configure como proxy la dirección localhost y el puerto 8080 o el que haya escogido para el proxy en el paso 4.
Para Firefox vaya a Herramientas —> Opciones —> Avanzado —> pestaña Red —> en el grupo Conexión presione el botón "Configuración" —>
Seleccione la opción "Configuración Manual del Proxy" —> En proxy HTTP ingrese localhost y en puerto 8888
. Verifique el campo "No usar proxy para" y borre su contenido, específicamente verifique que no tenga localhost ó 127.0.0.1.
Presione Aceptar en ambas ventanas para guardar la configuración.

Grabación de un script Web

7. Ingrese a la aplicación (http://localhost:8080/EjemploPruebaCarga/) y presione CTRL + F5 para forzar una recarga de todos los recursos de la página (en este caso que incluya imágenes y css). Use la aplicación como desee para este ejemplo, procure una navegación corta para comprender más fácil el script generado. Cuando finalice detenga el proxy.
La siguiente imagen corresponde al script de mi navegación que consistió en autenticarme y agregar una cosa.

Grabación de un script Web

8. Note que en verde señalo un montón de peticiones que no corresponden a la aplicación. La primera es la página de inicio y las otras son peticiones que realizan algunas de las barras de herramientas configuradas en mi navegador. (Ja!, este es un buen método para descubrir que es lo que hacen estas barras). El /favicon.ico es una petición que hace el navegador en búsqueda de un ícono para la página, así que también sobra. En la siguiente imagen muestro el script con todas estas peticiones eliminadas, sólo hay que seleccionarla y presionar "delete".

Grabación de un script Web

9. Dado que muchas veces los nombres de las peticiones se repiten, es buena idea numerarlas para facilitar el análisis de resultados. Para esto seleccione cada petición y en la pantalla derecha agregue un número en el campo Nombre:

Grabación de un script Web

10. Así luce el script después de numerar las peticiones:

Grabación de un script Web

11. Si su script se ve muy diferente, borre todo lo que haya grabado, cierre el navegador, vuélvalo a abrir y grabe de nuevo la navegación. Grabar un script sobre sesiones existentes generalmente trae problemas.

12. Guarde el script ingresando al menú Archivo —> Guardar.

Grabación de un script Web

13. Vamos ahora a ejecutar el script y ver los resultados. Para ver la salida de las peticiones, agregue un listener de tipo "Ver Árbol de Resultados" al nodo "Grupo de Hilos".

Grabación de un script Web

14. Ejecute el script usando el menú Lanzar —> Arrancar o presionando CTRL + R. Seleccione el árbol de resultados y haga clic en una de las peticiones, seleccione la pestaña "Datos de Respuesta" y en la parte inferior la opción "Render HTML". Verá el resultado de esa petición y aunque el dibujo HTML no incluye todos los elementos de la aplicación real, si es suficiente para interpretar los datos y verificar si la salida fue o no exitosa.

Grabación de un script Web

15. Vea que en mi caso la petición 05 está en rojo en el árbol de resultados. Eso es porque el servidor devolvió un error 500 al ejecutarla. Hasta acá no hay problema, este error está asociado a una de las particularidades de JavaServer Faces que es el ViewState, un dato que viaja en algunas peticiones y es generado dinámicamente. Este punto lo trataremos en la próxima sección.

16. Hay otros dos elementos muy útiles para analizar los resultados de los scripts ejecutados: La tabla de resultados y el informe agregado. Para usarlos agregue los elementos "Ver Resultados en Árbol" (que tiene un problema de traducción, pues realmente muestra los resultados en una tabla) e "Informe Agregado":

Grabación de un script Web

17. Para la próxima ejecución vamos a repetir el script 5 veces. Para hacerlo seleccione el elemento Grupo de Hilos y en el campo "Contador del bucle" ingrese 5:

Grabación de un script Web

17. Borre los datos del árbol de resultados presionando CTRL + E y ejecute de nuevo el script.

18. Note ahora como los listener muestran de diferente forma el mismo resultado:

Grabación de un script Web
Grabación de un script Web

Hasta acá las generalidades de grabación y ejecución de un script. En la próxima sección veremos como solucionar los problemas vistos hasta acá y grabaremos el script con el que haremos pruebas a la aplicación.

Si quiere ver el script que generé durante esta sección puede descargarlo de aquí.

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License