2016-10-10 22 views
1

Ich verwende Visual Studio Ultimate 2013 und habe einen Belastungstest, der einen Webtest mit einer Anzahl von Anforderungs- und Webtest-Plugins verwendet.Visual Studio Web Test Fehlerbehandlung

In meinem PostRequest-Plugin überprüfe ich den HTTP-Statuscode der Antwort und meldest einen Fehler in einem WebTest.Context-Parameter, wenn ein HTML-Code von über 400 zurückgegeben wird. Ich möchte das im PostTransaction WebTest Plugin abholen und eine Datenbanktabelle aktualisieren. Das Problem ist, dass der Test abgebrochen wird, wenn das Framework den Fehler erkennt und das PostTransaction-Plugin nicht aufgerufen wird.

Ich habe ein PostWebTest-Plugin hinzugefügt, von dem ich dachte, es würde aufgerufen werden, wenn die Test-Iteration abgebrochen wurde, aber es schlägt niemals, wenn eine Anfrage fehlschlägt. Es trifft es, wenn der Test erfolgreich ist. Was vermisse ich?

public override void PostRequest(object sender, PostRequestEventArgs e) 
{ 
    ... 
    statusCode = e.Response.StatusCode.GetHashCode(); 
    If (statusCode > 400) 
    { 
     e.WebTest.Context["TransactionFailCount"] = 1; 
    } 
} 

public override void PostTransaction(object sender, PostTransactionEventArgs e) 
{ 
    int transactionFailCount = Convert.ToInt32(e.WebTest.Context["TransactionFailCount"]); 
    if (transactionFailCount > 0) 
     failCount = 1; 
    else 
     passCount = 1; 
    ... 
    base.PostTransaction(sender, e); 

} 

public override void PostWebTest(object sender, PostWebTestEventArgs e) 
{ 
    base.PostWebTest(sender, e); 
} 

Dank

Antwort

0

A Webleistungstest (WPT) wird weiterhin ein Fehler ausgeführt werden, nachdem es sei denn, die Stop on error Eigenschaft des Test true ist erkannt wird. Es ist möglich, dass einige Aspekte der Bearbeitung einer Anfrage nach einem Fehler nicht ausgeführt werden, aber solche Fälle habe ich nicht gesehen.

Achten Sie auf die Terminologie. WPTs verwenden "Transaktionen", um mehrere Anfragen zu gruppieren. Das Kontextmenü (Rechtsklickmenü) einer Anfrage enthält einen Eintrag "Transaktion hinzufügen", der einen Bereich von Elementen im Test auswählt, die in dieser Transaktion enthalten sein sollen. Vielleicht sollten Sie die PostRequest oder PostPage Plugins anstelle von PostTransaction verwenden.

Ich empfehle, dass Sie einige Experimente mit einer einfachen zwei oder drei Anfrage WPT plus einige einfache Plugins, die nur ankündigen, dass sie aufgerufen wurden. Zum Beispiel

public override void PostRequest(object sender, PostRequestEventArgs e) 
{ 
    e.WebTest.AddCommentToResult("PostRequest called for url " + e.Request.Url); 
} 

Zusätzlich gibt es eine gute Erklärung, wie und wann Plugins sind in den Seiten 32 bis 44 der Visual Studio Performance Testing Quick Reference Guide von Codeplex genannt.

Die Aussage statusCode = e.Response.StatusCode.GetHashCode(); ist seltsam. Der Wert e.Response.StatusCode ist ein enum, es kann durch Gießen ein ganzzahliger Wert erhalten werden. Die GetHashCode Methode soll nicht den numerischen Wert eines enum erhalten. Die Aussage wäre besser als statusCode = (int)e.Response.StatusCode; oder die assign und Test (beachten Sie, dass if für conditionals in C# verwendet wird, nicht If) könnte besser sein, als

statusCode = e.Response.StatusCode; 
if (e.Response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { ... } 
+0

Danke Adrian. Das "Wenn" war einfach ein Tippfehler in der Post und ich erbte den Code für den Erhalt des Statuscodes. Ich habe es jetzt korrigiert, Sie sind zu Recht darauf hingewiesen. Ich werde das "Stop on Error" sicher ausschalten und es in meinem Code behandeln. –

+0

Bitte lesen Sie die [help] Seite, was es bedeutet, wenn die Antwort akzeptiert wird, siehe http://stackoverflow.com/help/accepted-answer. Wenn Ihre Frage nicht beantwortet wurde, bearbeiten Sie sie bitte, um die fehlenden Details zu erklären. – AdrianHHH

0

Dank Adrian. Das "Wenn" war einfach ein Tippfehler in der Post und ich erbte den Code für den Erhalt des Statuscodes. Ich habe es jetzt korrigiert, Sie sind zu Recht darauf hingewiesen.

Ich werde sicherlich die "Stop bei Fehler" ausschalten und in meinem Code behandeln. Andernfalls werde ich Ihre anderen Vorschläge versuchen.

Danke

Verwandte Themen