Как работать с приложением SignalR с помощью механизма длинного опроса для нагрузочного тестирования с использованием Jmeter - PullRequest
0 голосов
/ 11 сентября 2018

Нам нужно загрузить тестовое веб-приложение, используя SignalR в нескольких компонентах с режимом транспорта в качестве длинного опроса.Мой скрипт зависает на этапе подключения.Шаг соединения: GET- /signalr/connect?transport=foreverFrame&clientProtocol=1.5&connectionToken=ZW6cj17pImmCjGGBQSQNy%2Bdiy7DKDUy4i4R1AE78c%2FTitzS6QgiPoX6fM3zBOrDK11hyx0QNEc92JM6bsLY19MCt5JjaYFgdTDVsbxfnRbkqKp6dpsl64BV1zI8Vu1X%2F&connectionData=%5B%7B%22name%22%3A%22mypreviewhub%22%7D%5D&tid=10&frameId=1

Я коррелировал следующие 2 параметра: 1) захваченный токен соединения с шага согласования и использовался в последующих запросах 2) использовал ${__time()} для метки времени, как указано в ссылке, - Какзахватить строку соединения signalR в Jmeter

Помимо этого, я вижу еще 2 параметра, отправляемых в connect stepid и frameid.Нужно ли коррелировать и эти 2 параметра, хотя они не используются нигде, кроме шага подключения?

Или чего не хватает моему сценарию?

В различных постах я видел предложения по использованию плагинов сэмплера websocket, но я считаю, что это может быть полезно, если ваш SignalR использует механизм websocket, а не длительный опрос.

Пожалуйста, помогите мне решить эту проблему,Ваша помощь приветствуется.Спасибо

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Это решение для пользователей Load runner. 1.Tid не делает, ни идентификатор кадра не должен быть параметризованным. java-скрипт генерируется случайным образом для TID ОТ 1 до 11

  1. Ваша метка времени состоит из 12 цифр случайного числа

  2. ПРИЧИНА ДЛЯ ПЕРЕКЛЮЧЕНИЯ заключается в том, что фрейм навсегда является асинхронной функцией Signalr, вы должны использовать это утверждение для регистрации PUSH. Если PUSH не работает, тогда выполните опрос. КАК ТАК

web_reg_async_attributes("ID=Push_0", "Pattern=Push", "URL=https://YOURurl.COM/signalr/connect?transport=foreverFrame&clientProtocol=1.5&connectionToken={CONNECTIONTOKEN}&connectionData=%5B%7B%22name%22%3A%22interactionhub%22%7D%5Dtid={TID}&frameId=1", "RequestCB=Push_0_RequestCB", "ResponseHeadersCB=Push_0_ResponseHeadersCB", "ResponseBodyBufferCB=Push_0_ResponseBodyBufferCB", "ResponseCB=Push_0_ResponseCB", LAST);

Затем измените вашу функцию callback.c

int Push_0_ResponseBodyBufferCB( const char * aLastBufferStr, int aLastBufferLen, const char * aAccumulatedStr, int aAccumulatedLen, int aHttpStatusCode) {

// Введите вашу реализацию для ResponseBodyBufferCB () здесь.

lr_vuser_status_message("This is accumulated String %s", aAccumulatedStr);
lr_vuser_status_message("This is response body %s", aLastBufferStr);

Используйте параметр Asyn, включенный в следующий раз в ваших записях, и вы увидите этот материал, но вы должны закрыть окно браузера в конце записи, иначе материал Async не будет выпущен и создан в вашем сценарии !! Я выяснил это с помощью Fiddler.

0 голосов
/ 12 сентября 2018

Согласно Как работает длинный опрос? ответ:

Case: Сервер не имеет никакой информации, доступной для клиента, когда получен запрос (опрос).

Behavior: Вместо отправки пустого ответа, сервер удерживает запрос открытым и ожидает получения информации об ответе. Как только это произойдет, сервер немедленно отправит ответ HTTP / S клиенту , завершив открытый запрос HTTP / S.

Таким образом, ваше "зависание" может указывать на то, что с сервера не поступают данные.

Возможно, вы захотите проверить 5 способов загрузки теста Популярные плагины чата с помощью статьи JMeter , в которой предполагается использование Parallel Controller для реализации сценария длинного опроса, в нем даже есть пример плана тестирования

В любом случае ваш тест должен копировать то, что делает настоящий браузер, поэтому я бы рекомендовал захватывать запросы, отправляемые JMeter и реальным браузером, с использованием инструмента анализа, например Wireshark , и, если есть различия - изменить конфигурацию JMeter, чтобы запросы на 100% соответствовали запросам, исходящим из реального браузера

...