Test de Rendimiento de Aplicaciones Web


Test de Rendimiento

Los tests de rendimiento de una aplicación Web nos sirven para determinar tres items:

  • Velocidad: ¿Que rápida va la aplicación?
  • Escalabilidad: ¿Como se degrada el rendimiento al incrementarse las visitas?
  • Estabilidad: ¿Genera errores la aplicación ante picos de visitas?

Podemos elaborar diferentes test de rendimiento, en función del objetivo:

  • Humo: Test rápido para ver por encima como se comporta la aplicación.
  • Rendimiento: Nos indica como se comporta la aplicación ante una carga normal. Nos permite validar los tres items (velocidad, escalabilidad y/o estabilidad).
  • Stress: Nos indica como se comporta la aplicación ante un numero de visitas elevadas. Permite aflorar problemas de estabilidad.
  • Capacidad: Nos indica los límites que puede soportar nuestra aplicación. Permite determinar los recursos críticos de la aplicación.

En el siguiente enlace se muestra más información sobre metodología de elaboración de test de rendimiento. A continuación se describen los diferentes pasos.

1.- Captura del trafico de la aplicación Web

El primer paso a realizar es la obtención de las peticiones a la aplicación web. Se describen dos tipos de ficheros que contienen la navegación de URLs que realiza el usuario:

  • WebTest File: es el fichero de Visual Studio. Se puede obtener:
  • HTTP Archive Format (HAR) es el fichero estándar W3C. Se puede obtener:
    • Con Fiddler: Capturando tráfico filtrado por el host de la aplicación Web y exportandolo a HTTPArchive v1.2 (opción del menú Export -> All Sessions).
    • Con Chrome: En el menu contextual de la pestaña Network de las Developer Tools disponemos de la opción save as HAR with content.

2.- Determinar escenario de carga

No hemos solo de contemplar las peticiones a la Web.
\text{usuarios}\cdot \text{peticiones de usuario por minuto}=  \text{Total de peticiones por minuto}
Es clave determinar los dos factores que aparecen en la formula anterior:

  • Usuarios concurrentes: cada usuario genera en la Web su cookie, sesión y variables internas que consumen recursos en la aplicación. En un test de rendimiento estándar deberíamos considerar el doble o triple del numero de usuarios en la Web.
  • Peticiones por usuario: Por ejemplo, no es realista 200 peticiones usuario por minuto.

3.- Realización del Test de Rendimiento

Para realizar los Test de Rendimiento necesitamos Visual Studio Team Services; donde se van almacenar los resultados de los tests. El principal parámetro del test es la captura realizada. También se podría indicar las URLs manualmente pero esto es bastante engorroso 😦 .
Disponemos diferentes opciones de menor a mayor complejidad y potencia:

  • Performance Test Tool: Para App Service en Azure disponemos de una herramienta para realizar el test de rendimiento desde el mismo portal de Azure disponible en Tools -> Performance Test. A partir una WebTest File, solo permite configurar el numero de usuarios, el tiempo y la ubicación para realizar el test de carga.
  • Visual Studio Team Services: Podemos realizar directamente un test de carga a partir de HAR con una configuración más avanzada.
  • Un Web Performance And Load Test Project en Visual Studio:
    NewPerformandAndLoadTestProject
    Generamos un LoadTest donde indicamos el escenario a testear (usuarios, tiempo…). Añadimos un WebTest File (Web Performance Test) en el TestMix del LoadTest.NewLoadTestWizard
    Podemos ejecutar el test en una infraestructura de maquinas que generan las peticiones (controladores y agentes de Test); aunque la manera más simple es usar el servicio Cloud-based Load Testing service de Azure. En este caso, se asigna por defecto una maquina de 2 cores (agente de test) por cada 500 usuarios.
    Las ventajas que aporta el test en Visual Studio son:

    • Permite un escenario de test de rendimiento más complejo de las pruebas de carga; con Warning Up, patrón peticiones, distribución de navegadores o conectividad.
    • Permite generar tests dinámicos. Por ejemplo, simulando escenarios con parámetros de búsqueda diferentes obtenidos de un csv o base de datos.
    • Permite la utilización de parámetros dinámicos. Por ejemplo, parámetros de sesión.
    • Permite añadir información adicional. Al usar Application Insights. De esta manera podemos analizar en mayor profundidad las causas de los resultados. Podemos detectar los patrones de uso y también el consumo de recursos. Disponible en el menú contextual del LoadTest.
      ActivateApplicationInsightsOnLoadTest

4.- Análisis del Test de Rendimiento

En Visual Studio Team Services podemos ver los resultados de la ejecución del Test. La misma vista obtendremos en el Test Manager de Visual Studio ;-).

  • En Summary y Charts nos muestra los resultados del test en modo numérico y gráfico respectivamente.
  • En Diagnostics nos muestra información del proceso de configuración del entorno de test.
  • En Logs nos muestra las peticiones que han ido mal. Si no hay nada, todo ok 🙂

El objetivo es definir un test base para permitir realizar un seguimiento de los procesos optimización realizados en la aplicación web. A partir de aquí podemos hacer comparaciones entre los test; y observar las diferencias.
CompareRuns

Anuncios
Esta entrada fue publicada en Test, Visual Studio. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s