Pregunta

Tenemos un sitio de ASP.Net que lo redirige a una url que muestra un ID de sesión. así:

  

¿Fue útil?

Solución

Sí, es relativamente fácil hacer esto. Sin embargo, deberás crear una prueba web codificada.

En mi ejemplo, tenemos una entrada de inicio de sesión que devolverá la url, incluida la cadena de sesión. Justo después de la solicitud de entrada de inicio de sesión (request3) al enumerador, llamo a la siguiente.

WebTestRequest request3 = new WebTestRequest((this.Context["WebServer1"].ToString() + "/ICS/Login/English/Login.aspx"));
//more request setup code removed for clarity
yield return request3;
string responseUrl = Context.LastResponse.ResponseUri.AbsoluteUri;
string cookieUrl = GetUrlCookie(responseUrl, this.Context["WebServer1"].ToString(),"/main.aspx"); 
request3 = null;

Donde GetUrlCookie es algo como esto:

public static string GetUrlCookie(string fullUrl, string webServerUrl, string afterUrlPArt)
    {
        string result = fullUrl.Substring(webServerUrl.Length);
        result = result.Substring(0, result.Length - afterUrlPArt.Length);
        return result;
    }

Una vez que tenga la cadena de cookies de sesión, puede sustituirla fácilmente en cualquier URL posterior para solicitud / publicación por ejemplo,

WebTestRequest request4 = new WebTestRequest((this.Context["WebServer1"].ToString() + cookieUrl + "/mySecureForm.aspx"));

Pido disculpas por que mi código sea tan tosco, pero fue desaprobado en mi proyecto y se extrajo de la primera versión de la base de código, y por decir que fue fácil :)

Para cualquier prueba de carga, dependiendo de su aplicación, es posible que tenga que encontrar un procedimiento almacenado para llamar para proporcionar información de inicio de sesión distinta cada vez que se ejecuta la prueba.

Nota, debido a que la url de respuesta no se puede determinar con anticipación, para la publicación de inicio de sesión deberá desactivar temporalmente urlValidationEventHandler. Para hacer esto, almaceno la regla de validacióneventhandler en una variable local:

        ValidateResponseUrl validationRule1 = new ValidateResponseUrl();
        urlValidationRuleEventHandler = new EventHandler<ValidationEventArgs>(validationRule1.Validate);

Entonces, puedo encenderlo y apagarlo cuando lo requiera:

this.ValidateResponse -= urlValidationRuleEventHandler ;
this.ValidateResponse += urlValidationRuleEventHandler ;

La alternativa es codificar la suya como esta (reflejada del código de Visual Studio y cambiada para que no distinga entre mayúsculas y minúsculas.

class QueryLessCaseInsensitiveValidateResponseUrl : ValidateResponseUrl
{
    public override void Validate(object sender, ValidationEventArgs e)
    {
        Uri uri;
        string uriString = string.IsNullOrEmpty(e.Request.ExpectedResponseUrl) ? e.Request.Url : e.Request.ExpectedResponseUrl;
        if (!Uri.TryCreate(e.Request.Url, UriKind.Absolute, out uri))
        {
            e.Message = "The request URL could not be parsed";
            e.IsValid = false;
        }
        else
        {
            Uri uri2;
            string leftPart = uri.GetLeftPart(UriPartial.Path);
            if (!Uri.TryCreate(uriString, UriKind.Absolute, out uri2))
            {
                e.Message = "The request URL could not be parsed";
                e.IsValid = false;
            }
            else
            {
                uriString = uri2.GetLeftPart(UriPartial.Path);
                ////this removes the query string
                //uriString.Substring(0, uriString.Length - uri2.Query.Length);
                Uri uritemp = new Uri(uriString);
                if (uritemp.Query.Length > 0)
                {
                    string fred = "There is a problem";
                }
                //changed to ignore case
                if (string.Equals(leftPart, uriString, StringComparison.OrdinalIgnoreCase))
                {
                    e.IsValid = true;
                }
                else
                {
                    e.Message = string.Format("The value of the ExpectedResponseUrl property '{0}' does not equal the actual response URL '{1}'. QueryString parameters were ignored.", new object[] { uriString, leftPart });
                    e.IsValid = false;
                }
            }
        }
    }
}
scroll top