2013-02-17 11 views
5

se invio una richiesta e mi aspetto che la risposta arrivi tramite SignalR, è possibile testarla utilizzando un LoadTest o PerformanceTest in Visual Studio?WebTest per SignalR possibile?

risposta

0

Il modo migliore per caricare il test di un'applicazione SignalR è costruire sullo crank project incluso nella sorgente.

Si tratta di una soluzione semplice rampa costruita con il client .NET, ma è relativamente facile da modificare per chiamare qualsiasi metodo hub desiderata e di analizzare le risposte.

si può sempre collegare lo Studio Visual Profiler per IIS esprimere esempio per ottenere dati dettagliati profiling, se necessario.

2

Risposta breve: Sì

ho fatto più volte in CodedWebTests ma sarebbe anche possibile fare in un WebTest dichiarativa. È possibile utilizzare un gestore di eventi PreWebTest personalizzato per creare il client signalR e connettersi al proprio hub SignalR. Che cosa si sceglie di fare con la notifica signalR è a voi, ma a me piace salvarlo nel WebTestContext e di visualizzare sullo schermo i risultati del test con il metodo AddCommentToResult.

Il metodo seguente crea un hubConnection richiama la funzione "addToGroup" sull'hub e quindi dice al client cosa fare quando riceve un messaggio.

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

Utilizzarlo collegando il gestore di eventi nel costruttore di test.

public MyWebTest() 
{ 
    PreWebTest += new SignalRPlugin().PreWebTest; 
} 

Poi una volta che hai i messaggi signalR è possibile utilizzare una regola di convalida personalizzato per convalidare che la risposta è stata ricevuta. Basta fare un ciclo while controllando il WebTestContext per la chiave "signalRMessages". Ti suggerisco caldamente di aggiungere una funzione di timeout in modo da non aspettare per sempre se i messaggi non arrivano mai.

L'altra opzione se stai scrivendo CodedWebTests è creare un metodo WaitForNotifications che fondamentalmente fa la stessa cosa della convalida regola. Il vantaggio di questo è che è possibile utilizzare una regola di estrazione per ottenere i dati fuori l'ultima risposta e quindi utilizzare tali dati a convalidare i tuoi messaggi signalR. Se hai ancora bisogno di fallire un test nel vostro WaitForNotification metodo di utilizzo WebTest.InternalSetOutcome (Outcome.Fail);