Подтвердить что ты не робот

Каков наилучший способ загрузить тестовое приложение SignalR?

Я хотел бы знать некоторые из различных методов, которые были использованы для тестирования приложения на основе хабов SignalR.

4b9b3361

Ответ 1

Короче говоря, если использовать концентраторы, использование клиента .Net будет достаточным.

В моем случае у меня есть центр новостей, который отображает данные, специфичные для клиента, на основе идентификатора профиля пользователя. В моем тестовом примере я загружаю кучу идентификатора профиля (в этом случае 6000), вызывают метод хаба под названием JoinNewsfeed() вместе с идентификатором соединения и идентификатором профиля для конкретного клиента. Каждые 100 мс устанавливается новое соединение.

    [TestMethod]
    public void TestJoinNewsfeedHub()
    {
        int successfulConnections = 0;

        // get profile ID's
        memberService = new MemberServiceClient();
        List<int> profileIDs = memberService.GetProfileIDs(6000).ToList<int>();

        HubConnection hubConnection = new HubConnection(HUB_URL);
        IHubProxy newsfeedHub = hubConnection.CreateProxy("NewsfeedHub");


        foreach (int profileID in profileIDs)
        {
            hubConnection.Start().Wait();
            //hubConnection = EstablishHubConnection();
            newsfeedHub.Invoke<string>("JoinNewsfeed", hubConnection.ConnectionId, profileID).ContinueWith(task2 =>
            {
                if (task2.IsFaulted)
                {
                    System.Diagnostics.Debug.Write(String.Format("An error occurred during the method call {0}", task2.Exception.GetBaseException()));
                }
                else
                {
                    successfulConnections++;
                    System.Diagnostics.Debug.Write(String.Format("Successfully called MethodOnServer: {0}", successfulConnections));

                }
            });

            Thread.Sleep(100);

        }

        Assert.IsNotNull(newsfeedHub);
    }

Показатели производительности, перечисленные здесь делают трюк на сервере. Чтобы убедиться, что клиент фактически подключен, и процесс заполнения объекта клиента на сервере успешно завершен, у меня есть метод на стороне сервера, который вызывает клиентскую функцию с числом и списком подключенных клиентов, полученных из подключенного клиента коллекция.

Ответ 2

@ElHaix Из того, что я видел в своих собственных тестах, ваш метод не создает новое соединение, а повторно использует существующее соединение. Когда вы перебираете коллекцию идентификаторов profileID, вы должны увидеть, что hubConnection.ConnectionID остается неизменным. Чтобы создать новое соединение, вам нужно создать экземпляр HubConnection внутри цикла foreach.

        int successfulConnections = 0;
        const int loopId = 10;

        Console.WriteLine("Starting...");
        for (int i = 1; i <= loopId; i++)
        {
            Console.WriteLine("loop " + i);

            var hubConnection = new HubConnection(HUB_URL);
            IHubProxy chatHub = hubConnection.CreateProxy(HUB_NAME);

            Console.WriteLine("Starting connection");
            hubConnection.Start().Wait();
            Console.WriteLine("Connection started: " + hubConnection.ConnectionId);

            chatHub.Invoke("Register", "testroom").ContinueWith(task2 =>
            {
                if (task2.IsFaulted)
                {
                    Console.WriteLine(String.Format("An error occurred during the method call {0}", task2.Exception.GetBaseException()));
                }
                else
                {
                    Console.WriteLine("Connected: " + hubConnection.ConnectionId);
                    successfulConnections++;
                }
            });

            Thread.Sleep(1000);
        }

Ответ 3

Crank может тестировать только PersistenConnections, но поскольку вы хотите проверить сам SignalR Hub, вы можете использовать Tresi. Это коммерческое приложение. Вот несколько ссылок на то, как проводится тест производительности для разных типов нагрузок.

При выполнении теста нагрузки отображаются параметры счетчика производительности для HTTPWebRequests, такие как Created/Sec, Aborted/Sec, Average Lifetime и т.д. Он также показывает другие расчетные показатели, такие как пропускная способность/пользователь. Ниже показан снимок экрана приложения

enter image description here

Ответ 4

Я не проводил много тестирования производительности в SignalR, но проект предоставляет полезный инструмент - Crank - для генерации нагрузки клиента.

В вики проекта также есть некоторые рекомендации по полезным счетчикам производительности и настройкам

Ответ 5

Создайте свой собственный script с помощью инструмента Gatling для создания виртуального пользователя (многопоточность) и используйте java signalr client. пожалуйста, укажите в комментарии, если вы хотите знать, как присоединить свой пользовательский script, написанный в java или scala, к виртуальным пользователям gatling. Скажите мне, хотите ли вы план тестирования для тестирования производительности signalr, поскольку это ключевой момент при проведении тестов.