Signalr 是否可能对信号机进行网络测试?

Signalr 是否可能对信号机进行网络测试?,signalr,webtest,Signalr,Webtest,如果我发送了一个请求,并且我希望通过SignalR得到响应,那么是否可以在Visual Studio中使用LoadTest或PerformanceTest进行测试?加载测试SignalR应用程序的最佳方法是在源代码中包含的基础上构建 这是一个使用.Net客户端构建的简单的快速升级解决方案,但是修改调用所需的任何hub方法并分析响应相对容易 如果需要,您始终可以将Visual Studio profiler附加到iis express实例以获取详细的分析数据。简短回答:是 我已经在CodedWeb

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

加载测试SignalR应用程序的最佳方法是在源代码中包含的基础上构建

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

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

简短回答:是

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

下面的方法创建一个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);
        });
    }
}
然后,一旦有了信号器消息,就可以使用自定义验证规则来验证是否收到了响应。只需执行一个while循环,检查WebTestContext中的“signalRMessages”键。我强烈建议您确保添加一个超时功能,这样,如果消息从未传入,您就不会永远等待

如果您正在编写CodedWebTests,另一个选项是创建一个WaitForNotifications方法,该方法基本上执行与验证规则相同的操作。这样做的好处是,您可以使用提取规则从上次响应中获取数据,然后使用该数据验证您的信号器消息。如果您仍然需要在WaitForNotification方法中使测试失败,请使用WebTest.InternalSetOutcome(Outcome.fail)

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