Вопрос

Я пытаюсь загрузить приложение Rails с помощью JMeter. Критическая часть приложения включает в себя форму, которая включает в себя как текстовые входы, так и загрузки файлов. Он отлично работает в браузере, но когда я пытаюсь опубликовать эту страницу в Jmeter, Rails сохраняет все части многократной формы в виде временных файлов, что заставляет вещи ломаться, когда он ищет строку, и вместо этого получает Tempfile.

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

-----------------------------7d93b4186074c
Content-Disposition: form-data; name="field_name"

test
-----------------------------7d93b4186074c

В то время как из JMeter выглядит так:

-----------------------------7d159c1302d0y0
Content-Disposition: form-data; name="field_name"
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

test
-----------------------------7d159c1302d0y0

Таким образом, по -видимому, Рейс видит первое и интерпретирует его как простое значение текста и рассматривает его как строку, но видит последний и сохраняет его в временном файле.

Я не смог найти настройку, чтобы убедить Jmeter не отправлять дополнительные заголовки в форме Multipart для нефильных полей.

Есть ли способ убедить Rails игнорировать эти заголовки и рассматривать текст/простой текст как строки вместо текстовых файлов? Или быстрый способ поставить фильтр перед моим контроллером, который лишит дополнительные заголовки?

Альтернативно, есть ли лучший инструмент для тестирования приложения для загрузки рельсов, который включает загрузку файлов?

Это было полезно?

Решение 3

Там может быть лучший способ, но в итоге я добавил быстрый фильтр, чтобы превратить текст/простые температуры в строки в хэш параметра:

  def change_text_files_to_strings
    params.each_pair do |key, value|
      params[key] = value.read if (value.class.to_s=='Tempfile' && value.content_type.start_with?('text/plain') )
    end
  end

Кстати, оказывается, что Jmeter здесь прав, и Rails неверно: согласно RFC 2388, каждый элемент в многочисленном запросе должен иметь тип контента (не только файлы), поэтому рельсы действительно не должны использовать присутствие Заголовок типа контента, чтобы определить, является ли это файлом. Ах хорошо.

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

Оказывается, в наши дни вы можете просто отметить «Использование совместимых с браузером заголовками» в Jmeter. Мог бы сэкономить себе много времени там :-)

Итак, я настроил многократный запрос JMeter Multipart Propling Part в исходном коде, чтобы выпустить запрос, который понимают Rails. Изменение легко, как показано ниже, но для создания компиляции среды Java/Jmeter заняла время. :(

В любом случае, теперь я могу успешно загрузить файл по Multipart Post через jmeter.


В SRC/Protocol/HTTP/ORG/APACHE/JMETER/PROTOCOL/HTTP/SAMPLER/POSTWRITER.JAVA

writeStartFileMultipart()
//writeln(out, "Content-Transfer-Encoding: binary"); // $NON-NLS-1$

writeFormMultipart()
/*****
writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$
writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$
*****/

Пса

Наконечник для создания среды сборки для 2.4

  1. Чтобы прокомментировать сторонние библиотеки, проверьте файл build.xml.

  2. Скопируйте Lib/ xstream-1.3.1.jar из бинарного архива в Lib/ Directory

Я также использовал приведенное выше раствор, так как ColdFusion отправляла аналогичные заголовки (за исключением передачи передачи контента) с каждой частью данных формы. Интересно, есть ли лучший способ.

РЕДАКТИРОВАТЬ: Кто -нибудь знает, было ли это исправлено в Rails 3?

Какую ошибку вы получаете? Что-то типа

NoMethodError (undefined method `rewind' for "1":String):

Существует проблема со стойкой, которая может объяснить вашу проблему. Видеть https://github.com/rack/rack/issuesearch?state=open&q=rewind#issue/116

У нас также была аналогичная проблема, в дополнение к вышеуказанным ответам, мы также коррелируем X-CSRF-Token HTTP Header Manager в этом запросе и успешно смог загрузить необходимые средства массовой информации столько времени, сколько мы хотели.

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