Нагрузочное тестирование многочастной формы - PullRequest
1 голос
/ 22 декабря 2009

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

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

-----------------------------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

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

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

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

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

Ответы [ 6 ]

2 голосов
/ 02 сентября 2011

Оказывается, в эти дни вы можете просто поставить галочку "использовать совместимые с браузером заголовки" в JMeter. Мог бы спасти себя там чертовски много времени: -)

1 голос
/ 18 октября 2010

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

В любом случае, теперь я могу успешно загрузить файл с помощью составного сообщения через 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 /

0 голосов
/ 11 июня 2015

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

0 голосов
/ 14 февраля 2011

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

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

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

0 голосов
/ 09 сентября 2010

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

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

0 голосов
/ 23 декабря 2009

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

  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 каждый элемент в многочастном запросе должен иметь тип контента (а не только файлы), поэтому Rails действительно не должен использовать наличие заголовка типа контента, чтобы определить, является ли это файлом. Ах, хорошо.

...