要求を送信し、SignalR を介して応答が返されることを期待している場合、Visual Studio で LoadTest または PerformanceTest を使用してこれをテストすることは可能ですか?
2 に答える
短い答え: はい
CodedWebTests でこれを数回実行しましたが、宣言型 WebTest でも可能です。カスタム PreWebTest イベント ハンドラーを使用して、signalR クライアントを作成し、SignalR ハブに接続できます。signalR 通知をどうするかはあなた次第ですが、私はそれを WebTestContext に保存し、AddCommentToResult メソッドを使用してテスト結果画面に表示するのが好きです。
以下のメソッドは、hubConnection を作成し、ハブで「addToGroup」関数を呼び出し、メッセージを受信したときに何をすべきかをクライアントに伝えます。
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);
});
}
}
テスト コンストラクターにイベント ハンドラーをアタッチして使用します。
public MyWebTest()
{
PreWebTest += new SignalRPlugin().PreWebTest;
}
次に、signalR メッセージを取得したら、カスタム検証ルールを使用して、応答が受信されたことを検証できます。「signalRMessages」キーの WebTestContext をチェックする while ループを作成するだけです。メッセージが届かない場合に永遠に待機しないように、タイムアウト機能を追加することを強くお勧めします.
CodedWebTests を作成している場合のもう 1 つのオプションは、基本的に検証規則と同じことを行う WaitForNotifications メソッドを作成することです。これの利点は、抽出ルールを使用して最後の応答からデータを取得し、そのデータを signalR メッセージの検証に使用できることです。WaitForNotification メソッドでテストを失敗させる必要がある場合は、WebTest.InternalSetOutcome(Outcome.Fail); を使用します。
SignalR アプリケーションの負荷テストを行う最良の方法は、ソースに含まれているクランク プロジェクトをビルドすることです。
これは、.Net クライアントで構築された単純なランプアップ ソリューションですが、必要なハブ メソッドを呼び出して応答を分析するように変更するのは比較的簡単です。
必要に応じて、いつでも Visual Studio プロファイラーを iis Express インスタンスにアタッチして、詳細なプロファイリング データを取得できます。