WebTest for SignalR可能吗?

时间:2013-02-17 14:18:48

标签: signalr webtest

如果我发送请求,并且我希望响应来自SignalR,是否可以使用Visual Studio中的LoadTest或PerformanceTest对其进行测试?

2 个答案:

答案 0 :(得分: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消息,就可以使用自定义验证规则来验证是否收到了响应。只需要一个while循环检查WebTestContext的“signalRMessages”键。我强烈建议您确保添加一个超时功能,这样如果邮件永远不会进入,您就不会永远等待。

如果您正在编写CodedWebTests,另一个选项是创建一个WaitForNotifications方法,它基本上与验证规则做同样的事情。这样做的好处是,您可以使用提取规则从最后一个响应中获取数据,然后使用该数据验证您的signalR消息。如果仍需要在WaitForNotification方法中失败,请使用WebTest.InternalSetOutcome(Outcome.Fail);

答案 1 :(得分:0)

加载测试SignalR应用程序的最佳方法是构建源代码中包含的crank project

这是一个使用.Net客户端构建的简单的增强解决方案,但是相对容易修改以调用您需要的任何集线器方法并分析响应。

您可以随时将Visual Studio探查器附加到iis express实例,以便在需要时获取详细的分析数据。