2013-02-17 17 views
5

jeśli wyślę żądanie i spodziewam się, że odpowiedź dotrze do SignalR, czy możliwe jest przetestowanie tego przy użyciu testu LoadTest lub PerformanceTest w Visual Studio?WebTest dla SignalR możliwe?

Odpowiedz

0

Najlepszym sposobem na załadowanie testu aplikacji SignalR jest wbudowanie w urządzenie źródła crank project.

To proste rozwiązanie typu "ramp-up" stworzone z klientem .Net, ale stosunkowo łatwo jest go zmodyfikować, aby wywoływać dowolne wymagane metody koncentratora i analizować odpowiedzi.

Zawsze można dołączyć profiler programu Visual Studio do instancji iis express, aby uzyskać szczegółowe dane profilowania, jeśli jest to wymagane.

2

Krótka odpowiedź: Tak

Zrobiłem to kilka razy w CodedWebTests ale byłoby również możliwe do zrobienia w deklaratywnej WebTest. Możesz użyć niestandardowego modułu obsługi zdarzeń PreWebTest, aby utworzyć swojego klienta signalR i połączyć się z koncentratorem SignalR. To, co zdecydujesz się zrobić z powiadomieniem signalR, zależy od ciebie, ale chciałbym zapisać go w WebTestContext, a także wyświetlić go na ekranie wyników testu przy użyciu metody AddCommentToResult.

Poniższa metoda tworzy połączenie hubConnection w funkcji "addToGroup" w hoście, a następnie informuje klienta, co ma zrobić po otrzymaniu wiadomości.

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

Użyj go, dołączając moduł obsługi zdarzeń do konstruktora testowego.

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

Po uzyskaniu wiadomości signalR można użyć niestandardowej reguły sprawdzania poprawności, aby potwierdzić, że odpowiedź została odebrana. Wystarczy pętla sprawdzająca WebTestContext dla klucza "signalRMessages". Zdecydowanie sugeruję, aby dodać funkcję limitu czasu, aby nie czekać na zawsze, jeśli wiadomości nigdy nie pojawią się.

Inną opcją, jeśli piszesz CodedWebTests, jest stworzenie metody WaitForNotifications, która w zasadzie robi to samo co sprawdzanie poprawności reguła. Zaletą tego jest to, że można użyć reguły wyodrębniania, aby pobrać dane z ostatniej odpowiedzi, a następnie użyć tych danych podczas sprawdzania poprawności wiadomości signalR. Jeśli nadal musisz zakończyć test w swojej metodzie WaitForNotification, użyj WebTest.InternalSetOutcome (Outcome.Fail);