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

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

Con esto, al ejecutar el webtest podremos ver cómo se emplea cada vez un SessionID diferente, con lo que conseguimos independizar cada prueba.
3693d3a6-e3d4-487e-bfbc-00945fd18e30|0|.0