Frage

Wir haben eine ASP.Net-Site, die Sie auf eine URL umleitet, die eine Session-ID zeigt. wie folgt aus:

  

http: // localhost / (S (f3rjcw45q4cqarboeme53lbx)) /main.aspx

Diese ID ist einzigartig bei jeder Anfrage.

Ist es möglich, diese Website zu testen, ein Standard-Visual Studio 2008/2010 webtest mit? Wie kann ich den Test diese Daten zur Verfügung stellen?

Ich habe ein paar verschiedene Seiten aufrufen, die gleiche ID verwendet wird.

War es hilfreich?

Lösung

Ja, es ist relativ einfach, dies zu tun. Sie werden jedoch eine codierte webtest erstellen müssen.

In meinem Beispiel haben wir einen Login-Beitrag, der die URL einschließlich der Session String zurück. Kurz nach dem Ertrag wir die Login-Post-Anforderung (request3) an dem enumerator ich folgend nennen.

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;

Wo GetUrlCookie ist so etwas wie folgt aus:

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;
    }

Wenn Sie die Session-Cookie-String haben, können Sie ersetzen es wirklich einfach, in allen nachfolgenden URLs für Anfrage / Post z.

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

Ich entschuldige mich für meinen Code so rau sein, aber es war in meinem Projekt als veraltet und wird von der ersten Version der Codebasis gezogen - und sagte, es war einfach:)

Für jede Lasttests, je nach Anwendung, können Sie mit einer gespeicherten Prozedur verschiedene Login-Daten zur Verfügung zu stellen, um zu anrufen zu kommen jedes Mal, wenn der Test durchgeführt wird.

Beachten Sie, da die Antwort-URL nicht vor der Zeit festgestellt werden kann, für den Login-Beitrag wird vorübergehend müssen die urlValidationEventHandler auszuschalten. Um dies zu tun Ich speichere die validationruleeventhandler in einer lokalen Variablen:

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

So kann es dann ein- und ausschalten, als ich brauche:

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

Die Alternative ist, Ihre eigene wie diese (reflectored aus der Visual Studio-Code zu codieren und verändert Fall unempfindlich sein.

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;
                }
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top