Прокси-сервер JMeter и сериализация java в HTTP / POST?

StackOverflow https://stackoverflow.com/questions/2110041

  •  22-09-2019
  •  | 
  •  

Вопрос

У нас есть связь между апплетом и сервлетом, которую мы хотели бы записать с помощью HTTP-прокси JMeter.Он работает с сообщениями GET до тех пор, пока апплет не отправит HTTP POST сообщение, которое включает в себя некоторые сериализованные объекты Java (встроенные типы), затем мы получаем эту ошибку в апплете:

альтернативный текст http://img339.imageshack.us/img339/9238/appletservletjmeterhttp.png

Итак, где-то в очереди произошел конфликт версий JVM.Но где?

Связь работает нормально без JMeter, то есть:Апплет -> Tomcat -> Сервлет.Все на моем локальном компьютере.

Но это не работает через JMeter:Апплет -> прокси-сервер JMeter -> Tomcat -> Сервлет.Тоже все на моей машине.

Это похоже на то, как если бы JMeter изменял содержимое сообщения POST...

Я также протестировал его с прокси-сервером Apache, он работает нормально.

Еще смешнее то, что у меня установлена только одна версия Java, один JDK и один JRE.Оба 1.6.0_07...

Подумал, что стоит спросить, прежде чем начать копать глубже в кроличью нору ;-)

Вот шестнадцатеричный дамп данных POST, отправленных непосредственно в Tomcat:

00000348  ac ed 00 05 73 72 00 11  6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000358  67 2e 49 6e 74 65 67 65  72 12 e2 a0 a4 f7 81 87 g.Intege r.......
00000368  38 02 00 01 49 00 05 76  61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000378  6a 61 76 61 2e 6c 61 6e  67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000388  86 ac 95 1d 0b 94 e0 8b  02 00 00 78 70 00 00 01 ........ ...xp...
00000398  7b                                               {

И вот данные, отправленные через JMeter:

00000128  ac ed 00 05 73 72 00 11  6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000138  67 2e 49 6e 74 65 67 65  72 12 e2 a0 a4 f7 3f 3f g.Intege r.....??
00000148  38 02 00 01 49 00 05 76  61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000158  6a 61 76 61 2e 6c 61 6e  67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000168  3f ac 3f 1d 0b 3f e0 3f  02 00 00 78 70 00 00 01 ?.?..?.? ...xp...
00000178  7b                                               {

Много "3f" на втором дампе...Так что это определенно какая-то проблема с кодировкой.Тип содержимого правильно задан в заголовке:

POST /ABCOrder/ABCServlet?cmd=getNetworkConnection HTTP/1.1
Connection: keep-alive
Content-Type: application/octet-stream
Host: 109.107.148.164:8443
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Mozilla/4.0 (Windows Vista 6.0) Java/1.6.0_14
Content-Length: 81
Это было полезно?

Решение

Вот решение:У JMeter есть конфигурационный файл, bin/jmeter.свойства.Здесь вы можете найти опцию, в которой вы можете задать типы двоичного контента:

# Binary content-type handling
# These content-types will be handled by saving the request in a file:
proxy.binary.types=application/x-amf,application/x-java-serialized-object

Теперь я не знаю, почему приложение / октет-поток не включен по умолчанию, но вы можете просто добавить его в список, и все готово.

proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream

Вот как я это выяснил:https://issues.apache.org/bugzilla/show_bug.cgi?id=44808

Выполнил поиск по JMeter закрыто жуки...:-)

Другие советы

Кто-то другой сообщает об очень похожем: http://markmail.org/message/pl5erin2isehm5q6.Я не могу найти ни одной проблемы, связанной с этой проблемой, в их отслеживание ошибок хотя.Похоже, вы получили привилегию копнуть поглубже в кроличью нору :)

Принятый ответ разрешает записывать только статические запросы.Это будет нереально, поскольку не позволит изменять запросы (например, изменять искомое слово, ...), поэтому вы всегда будете подвергать стресс-тестированию один и тот же набор данных.

Чтобы сделать это настоящим тестом, вам нужно использовать сторонний плагин.

Коммерческий плагин JMeter позволяет это, см.:

Чтобы сделать ваши тесты реалистичными, вам нужно будет изменять содержимое в сериализованных объектах.

Этот плагин сериализации Java позволит следующее:

  • Простая запись трафика с помощью прокси-сервера JMeter, будет создан План тестирования с использованием пользовательского сэмплера

  • Простая вариабилизация запросов (которые будут отображаться в виде XML) с помощью такого же простого синтаксиса, как, например, ${searchedWord}, где searchedWord может быть получен из CSV или любой пользовательской переменной.

  • Простое извлечение данных из ответов с использованием стандартных постпроцессоров JMeter

  • Простая отладка запросов / ответов с помощью стандартного элемента дерева результатов просмотра JMeter

Отказ от ответственности: я работаю в этой компании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top