2013-02-17 19 views
5

Wenn ich eine Anfrage sende und ich erwarte, dass die Antwort SignalR erreicht, ist es möglich, dies mit einem LoadTest oder PerformanceTest in Visual Studio zu testen?WebTest für SignalR möglich?

Antwort

0

Die beste Methode zum Laden einer SignalR-Anwendung besteht darin, auf dem in der Quelle enthaltenen Code crank project aufzubauen.

Dies ist eine einfache Ramp-Up-Lösung, die mit dem .Net-Client erstellt wird. Sie ist jedoch relativ einfach zu ändern, um die von Ihnen benötigten Hub-Methoden aufzurufen und die Antworten zu analysieren.

Sie können den Visual Studio-Profiler immer an Ihre IIS-Express-Instanz anhängen, um bei Bedarf detaillierte Profilerstellungsdaten zu erhalten.

2

Kurze Antwort: Ja

ich dies mehrmals in CodedWebTests getan haben, aber es wäre auch in einer deklarativen WebTest zu tun möglich. Sie können einen benutzerdefinierten PreWebTest Event Handler verwenden, um Ihren signalR-Client zu erstellen und eine Verbindung zu Ihrem SignalR-Hub herzustellen. Was Sie mit der signalR-Benachrichtigung tun, bleibt Ihnen überlassen, aber ich möchte es im WebTestContext speichern und auf dem Testergebnisbildschirm mit der AddCommentToResult-Methode anzeigen.

Die folgende Methode erstellt eine hubConnection ruft die Funktion "addToGroup" auf dem Hub auf und teilt dem Client dann mit, was er tun soll, wenn er eine Nachricht erhält.

using Microsoft.AspNet.SignalR.Client; 

public class SignalRPlugin : WebtTestPlugin 
{ 
    public override void PreWebTest(object sender, PreWebTestEventArgs e) 
    { 
     var hubConnection = new HubConnection("yourSignalRUrl"); 
     var hubProxy = hubConnection.CreateHubProxy("notifications"); 

     hubConnection.Start().Wait(); 
     hubProxy.Invoke("addToGroup", "me"); 

     hubProxy.On<string>("message", s => 
     { 
      e.Webtest.AddCommentToResult(s); 
      e.Webtest.Context.Add("signalRMessages", s); 
     }); 
    } 
} 

Verwenden Sie es, indem Sie den Ereignishandler in Ihrem Testkonstruktor anhängen.

Sobald Sie die SignalR-Nachrichten haben, können Sie eine benutzerdefinierte Validierungsregel verwenden, um zu bestätigen, dass die Antwort empfangen wurde. Überprüfen Sie den WebTestContext mit einer while-Schleife auf den Schlüssel "signalRMessages". Ich schlage vor, dass Sie eine Timeout-Funktion hinzufügen, so dass Sie nicht ewig warten, wenn die Nachrichten nie kommen.

Die andere Option, wenn Sie CodedWebTests schreiben, ist eine WaitForNotifications-Methode zu erstellen, die im Grunde dasselbe wie die Validierung tut Regel. Der Vorteil dabei ist, dass Sie eine Extraktionsregel verwenden können, um Daten aus der letzten Antwort abzurufen und diese Daten dann für die Validierung Ihrer signalR-Nachrichten zu verwenden. Wenn Sie einen Test in Ihrer WaitForNotification-Methode noch immer nicht ausführen können, verwenden Sie WebTest.InternalSetOutcome (Outcome.Fail);