#jmeter
Вопрос:
Существует http-запрос, на который сервер не отвечает «ответом http или http/json». Сервер отправляет некоторые tcp-сообщения, такие как [ACK] и [PSH,ACK].
Но JMeter ожидает ответа http, потому что запрос является образцом http — запроса.
Есть ли правильный способ, которым я могу продолжить, как если бы ответ на этот запрос был получен правильно?
Комментарии:
1. Можете ли вы включить пример скриншота
Sampler Result
иResponse Data --> Body and Header
из дерева результатов просмотра?2. я включаю скриншоты. в этом тесте существует значение времени ожидания ответа для запроса signalr/connect (10 мс). таким образом, тело ответа связано с этим временем ожидания.
Ответ №1:
Я прав, говоря, что вы больше ищете образец TCP, а не образец HTTP?
Комментарии:
1. я должен отправить запрос по протоколу http.
2. Хорошо, круто, значит, вам нужно отправлять HTTP, но получать ответы TCP? Если это так, вы можете настроить постпроцессор JSR так, чтобы он имел prev.setSuccessful(true), что приведет к тому, что HTTP-сэмплер JMETER «сработает и забудется».
3. На самом деле я не уверен, что то, что я опубликовал выше, сработает для вас. Но все же попробуйте. В противном случае вы могли бы записать все свои HTTP-запросы в пробоотборник beanshell и не ждать ответа?
4. я постараюсь быть счастливой. другой, связанный с почтовым процессором jsr, не работал. при его добавлении результат запроса был передан (стал зеленым), но jmeter завершает связь, отправляя запрос tcp.
5. любой пример запроса http get с помощью beanshell?
Ответ №2:
TCP ACK-это не тот ответ, который вам нужен, я полагаю. Это просто транспортный уровень. В соответствии с протоколом HTTP должен быть ответ на каждый запрос, я имею в виду HTTP-ответ. Таким образом, ваш сервер работает неправильно, и JMeter показывает это.
Комментарии:
1. существует также ответное сообщение [PSH,ACK]. когда я выполняю тест с помощью браузера, он проходит без каких-либо проблем. но ваш ответ имеет смысл. является ли обязательным отвечать протоколом http на все запросы signalr. если да, то сервер работает неправильно.
Ответ №3:
Просто сравните запросы, которые отправляет JMeter, с запросами, которые отправляет реальный браузер, настройте JMeter так, чтобы он вел себя точно так же, как настоящий браузер, и все.
Если вы хотите получить исчерпывающий ответ, вам нужно показать:
- Полные сведения о HTTP-запросе в Wireshark (например, следуйте потоку HTTP) из реального браузера
- То же самое для JMeter
- Ваша конфигурация пробоотборника HTTP-запросов (включая любые элементы конфигурации, такие как диспетчер заголовков HTTP)
Слепой выстрел: может ли быть так, что ваш образец HTTP-запроса вызывает протоколы переключения, а последующая связь происходит с использованием WebSockets?
Если да — дважды проверьте, отправляете ли вы правильные заголовки, такие как:
- Соединение: Обновление
- Обновление: websocket
и как только это будет сделано, продолжайте имитировать трафик с помощью сэмплеров WebSocket
Комментарии:
1. примечание : я хочу добавить файл .jmx сюда. я тщательно исследовал различия между chrome и jmeter, единственная разница заключается в управлении ответами tcp. jmeter не может получить tcp-ответ на http-запрос. я рассматриваю эту проблему при запуске из браузера. сервер не отвечает http или http/json на запрос signalr/connect. в этом-то и проблема. браузер понимает, но jmeter этого не делает.
2. сервер выбирает способ транспортировки как «ServerSentEvents». и во время теста используется этот метод переноса, действительный как для браузера, так и для jmeter
3. Сэмплеры HTTP-запросов JMeter не поддерживают «ServerSentEvents», если вам нужно извлечь из них некоторую информацию, т. Е. для целей корреляции , вам потребуется использовать специальную библиотеку из тестовых элементов JSR223, как описано в статье » Как загрузить службы тестирования SSE с помощью JMeter «.
4. я собираюсь попробовать это завтра. но я уже преодолел проблему корреляции (connectionToken). потому что другие запросы signalr, кроме signalr/connect, имеют http-ответы, отправленные сервером.