Pequeña introducción
Continuando con el post anterior vamos a mostrar cómo podemos realizar pruebas de carga sobre nuestras aplicaciones web utilizando Visual Studio 2010 en forma más detallada. La idea principal es ver cómo responde nuestra web ante varias peticiones concurrentes y obtener información sobre los Performance Counters de nuestros servidores que nos servirán de base para detectar problemas en la aplicación o en los servidores donde está alojada.
Que son los Performance Counters?
Los contadores de rendimiento son objetos del sistema operativo que nos muestran información sobre el rendimiento del hardware y software, como por ejemplo la memoria, el disco y los procesos.
Un contador es una medida de un parámetro determinado. Estos se organizan en grupos como por ejemplo los que vienen con el sistema operativo que están comprendidos dentro del objeto System y otros que se instalan como los de SQL Server.
Windows trae una herramienta para acceder a los objetos y sus contadores, la misma se llama Performance Monitor, la cual podemos accederla yendo a Incio --> Ejecutar --> y escribir Perform.

WebTests
Para realizar nuestras pruebas de stress lo primero que debemos hacer es crear nuestros Webtest, en el cual se definen cuáles son las urls sobre las que van a realizarse las pruebas. Algo muy importante es que deben tener instalada la versión Ultimate del Visual Studio 2010 para poder contar con estos tipos de test (la versión 2008 del Visual Studio ya contaba con esta funcionalidad).
Pasos para crearlo.
1. En el visual Studio vamos a crear un nuevo proyecto del tipo Test, para eso ir a New –> Proyect --> Test --> Test project y generamos el proyecto base de test.

2. Eliminamos la clase que nos agrega por default.

3. Agregamos un nuevo test del tipo Web Performance Test, haciendo botón derecho sobre el proyecto –> Add --> Web Performance Test

Al hacer esto se nos abrirá el Web Test Recorder, donde debemos ingresar la dirección web que deseamos testear, en nuestro ejemplo ingresaremos www.google.com.ar y vamos a buscar VEMN y veremos como el Recorder va guardando las urls junto con sus parámetros gets, los cuales están dentro de una carpeta llamada QueryStrings Parameters.

Luego cerraremos esta ventana y vamos a quedarnos a nivel de ejemplo con solo la primer URL y sus parámetros.

Ahora debemos agregar a nuestro proyecto un Load test (test de carga) que será el encargado de simular múltiples peticiones sobre la URL que cargamos en el Webtest. Para esto hacemos botón derecho sobre el proyecto y seleccionamos add-->Load Test y se nos abrirá un wizard con su clásica ventana de bienvenida le damos next para para a configurar el test de carga.

Lo primero que nos pide es un nombre para el escenario de test que vamos a crear y nos pide seleccionar que tipo de pausas queremos entre la ejecución de las distintas iteraciones, en el ejemplo lo dejaremos como viene por default y le pasaremos al próximo paso.

En este caso nos pide que seleccionemos el patrón de carga el cual puede ser constante donde le definimos la cantidad de usuarios que debe simular de forma constante durante el transcurso de toda la prueba, o incremental que es el que vamos a elegir nosotros para nuestro ejemplo, los parámetros que nos pide son los siguientes
- · Start User Count: Cantidad de usuarios que se generaran cuando comience la prueba, en nuestro caso pondremos 20.
- · Step Duration: Donde definimos la cantidad de segundos que van a pasar hasta que se agreguen más peticiones sobre la URL que estamos testeando, en nuestro caso 15 segundos.
- · Step User Count: Cantidad de usuarios que se agregaran una vez transcurrido el tiempo configurado en Step Duration.
- · Maximun User Count: Donde definimos la cantidad máxima de usuarios a simular.

Luego nos pide el modelo a utilizar por el test de carga, en nuestro caso elegiremos el primer modelo basado a partir del número total de pruebas. Podemos ver aquí un detalle de cada uno de estos modelos.

En el próximo paso del asistente debemos elegir los webtest que deseamos testear en el presente escenario, en nuestro caso vamos a elegir el único que tenemos pero podríamos seleccionar varios y asignar la distribución para cada uno de estos.

Ahora ingresamos las distintas formas de conexión que deseamos testear y la distribución que queremos darle a cada uno.

En el próximo paso seleccionaremos los distintos browsers que queremos que el test de carga simule y la forma en que se distribuirá la carga.

Ahora debemos ingresar el nombre del equipo que deseamos supervisar que debería ser donde se encuentra alojado el sitio web que estamos probando, este debe ser un servidor el cual se encuentre en nuestra red o nuestra propia máquina. Si nuestro sitio tiene distintos servidores como por ejemplo uno para la BD y otro para donde se encuentra alojado el sitio, podemos agregar ambos haciendo click en add computer.
Debemos seleccionar los performance counter que deseamos monitorear en cada uno de los equipos.

En el último paso del Wizard, nos pide la duración del test que en nuestro caso lo vamos a dejar en 10 minutos y también podemos configurar si queremos que nos genere un log cada vez que un test falle, entre otras cosas.
Presionamos sobre Finish y podemos ver como quedo configurado nuestro test de carga.

Listo! Estamos en condiciones de poner a correr nuestro test y ver el comportamiento de los performance counters de los diferentes equipos supervisados.

En nuestro próximo post vamos a ver cómo generar el código de nuestros Webtest para hacerlos más dinámicos y como pasar parámetros a la URL a través de distintas fuentes como pueden ser base de datos, archivos csv o xmls.