Я тестирую один проект через протокол protobuf и используя HTTP Request Sampler. Целевой сервер приложений также написан на Java. Существует проблема с ошибками в Reponses:Испытание на пробойбу Jmeter. Не удалось прочитать сообщение Protobuf
«Не удалось прочитать Protobuf сообщение: Протокол сообщение содержало недопустимый тег (ноль) .; вложенной исключение составляет com.google.protobuf.InvalidProtocolBufferException: Протокол сообщение содержал недопустимый тег (ноль) «
Дело в том, что это происходит не в 100% -ном запросе. Когда я использовал HttpClient4, это было около 30-40% неудачных запросов. После того, как я изменил его на HttpClient3.1 коэффициент ошибок снизился до ~ 10%, что тоже не очень хорошо.
Чтобы отправить сообщение protobuf, я использую переменную $ {data} на вкладке Bodydata HttpSampler. И в BeanShell препроцессоре я сделать следующее:
(import and non-necessary stuff were ommited)
MapViewport mv = MapRequest.MapViewport.newBuilder().setMaxX(mc.getX()+15).setMaxY(mc.getY()+15).setMinX(mc.getX()-15).setMinY(mc.getY()-15).build();
byte[] data = mv.toByteArray();
vars.put("data", new String(data));
Также я судимый для использования различных кодировок, как новой строки (данные, «UTF-8») АНСО на.
Если посмотреть на вкладке «Запрос», если «Посмотреть дерево результатов», я могу сказать, что все несоответствующие сообщения содержат «?» символ:
Кажется, некоторые странные символы не должны быть отправлены, но ~ 10% запросов после сохранения массива байтов в строку содержать их.
Итак, вы конвертируете двоичный поток в String для сохранения в виде var, что может быть сопряжено с проблемами в зависимости от кодировки. Это также зависит от системы, и поведение может измениться. Более того, когда вы '$ {data}', вы отправляете строку, которая для некоторых двоичных данных вставляет '?' Первое решение, которое приходит на ум, - это записать двоичный поток в файл и использовать путь к файлу как переменная в bodydata. Но это может привести к большому объему ввода-вывода файлов. Хм .. это немного мыслитель. – RaGe
В качестве альтернативы вы можете собрать свой собственный HTTP-запрос и отправить его из пробоотборника beanshell вместо использования пробоотборника HTTP. Интересно, будет ли полезен «HTTP Raw Request» из jmeter-плагинов. – RaGe