【问题标题】:WebTest for SignalR possible?SignalR 的 WebTest 可能吗?
【发布时间】:2013-02-17 14:18:47
【问题描述】:

如果我发送请求,并且我希望通过 SignalR 得到响应,是否可以在 Visual Studio 中使用 LoadTest 或 PerformanceTest 进行测试?

【问题讨论】:

    标签: signalr webtest


    【解决方案1】:

    简短回答:是的

    我已经在 CodedWebTests 中多次这样做了,但在声明性 WebTest 中也可以这样做。您可以使用自定义 PreWebTest 事件处理程序来创建您的 signalR 客户端并连接到您的 SignalR 集线器。您选择对 signalR 通知做什么取决于您,但我喜欢将其保存到 WebTestContext 并使用 AddCommentToResult 方法将其显示在测试结果屏幕上。

    下面的方法创建一个hubConnection,调用hub上的“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);

    【讨论】:

      【解决方案2】:

      对 SignalR 应用程序进行负载测试的最佳方法是在源代码中包含的 crank project 上进行构建。

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

      如果需要,您始终可以将 Visual Studio 分析器附加到您的 iis express 实例以获取详细的分析数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多