Realizando pruebas de carga de una aplicación Cookieless

Creado el día 09/01/2008 09:31 por zorry

La aplicación web en la que estoy trabajando, trabaja en modo cookieless. Necesito probarla y replicar el funcionamiento del navegador. Una aplicación funcionando en modo cookieless almacena el ID de sesión en la URL, de manera que tras la primera petición del navegador, la aplicación redirige a otra Url, con el ID de sesión embebido, y las consecuentes peticiones contienen este Id de Sesión.

Cuando realizamos una captura de sesión mediante Fiddler (ver artículo anterior), al capturar la sesión, capturamos el SessionID, quedando este en hardcode en las peticiones. Si necesitamos que el SessionID varíe para cada prueba, necesitamos que capturar el SessionID de la primera petición y propagarlo a las siguientes.

Para poder hacerlo, vamos a crearnos un CustomExtractionRule, para ello, nos creamos una clase que herede de ExtractionRule:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4: using Microsoft.VisualStudio.TestTools.WebTesting;
   5:  
   6: namespace WebTest.Funcional
   7: {
   8:     public class ExtractCookielessSessionId : ExtractionRule
   9:     {
  10:         public override void Extract(object sender, ExtractionEventArgs e)
  11:         {
  12:             if (!e.Response.IsHtml)
  13:             {
  14:                 e.Success = false;
  15:                 e.Message = "The response did not contain HTML";
  16:             }
  17:  
  18:             //Obtiene el SessionID para cookieless
  19:             string beginSessionId = "(S(";
  20:             string endSessionId = "))";
  21:             string url = e.Response.ResponseUri.AbsoluteUri;
  22:             int inicioSID = url.IndexOf(beginSessionId);
  23:             int finSID = url.IndexOf(endSessionId);
  24:  
  25:             if (inicioSID >= 0 && finSID > inicioSID)
  26:             {
  27:                 string sessionId = url.Substring(inicioSID, finSID - inicioSID + endSessionId.Length);
  28:                 e.WebTest.Context.Add(this.ContextParameterName, sessionId);
  29:             }
  30:             
  31:         }
  32:  
  33:         public override string RuleName
  34:         {
  35:             get { return "ExtractCookielessSessionId"; }
  36:         }
  37:  
  38:         public override string RuleDescription
  39:         {
  40:             get { return "Extracts Cookieless Session Id"; }
  41:         }
  42:     }
  43: }

 

Una vez creada esta clase, compilamos el proyecto de pruebas, y agregamos la nueva CustomExtractionRule a la primera petición. Además, a la regla, le ponemos el nombre de parámetro de contexto SESSION (de esta manera, la regla de extracción sacará el SessionID a esta variable de contexto).

addextractionrule

Posteriormente, sólo nos quedará modificar el resto de las Url, sustituyendo el SessionID por el valor {{SESSION}}:

steps

Con esto, al ejecutar el webtest podremos ver cómo se emplea cada vez un SessionID diferente, con lo que conseguimos independizar cada prueba.


No se aceptan más comentarios