1

JMeterを使用してRailsアプリケーションの負荷テストを行おうとしています。アプリケーションの重要な部分には、テキスト入力とファイルアップロードの両方を含むフォームが含まれます。ブラウザでは問題なく動作しますが、そのページを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アプリケーションの負荷テストを行うためのより良いツールはありますか?

4

6 に答える 6

2

最近では、JMeterで「ブラウザ互換ヘッダーを使用する」にチェックマークを付けることができます。そこに多くの時間を費やすことができたでしょう:-)

于 2011-09-02T04:40:29.143 に答える
1

そこで、レールが理解できるリクエストを出すために、ソースコードのJMeterのマルチパートリクエスト投稿部分をカスタマイズしました。以下に示すように変更は簡単ですが、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$
*****/

PS

2.4のビルド環境を作成するためのヒントは次のとおりです。

  1. サードパーティライブラリをコメントアウトするには、build.xmlファイルをチェックインします。

  2. lib/xstream-1.3.1.jarをバイナリアーカイブからlib/ディレクトリにコピーします

于 2010-10-18T12:09:27.623 に答える
0

より良い方法があるかもしれませんが、テキスト/プレーンの一時ファイルをパラメーターハッシュ内の文字列に変換するためのクイックフィルターを追加することになりました。

  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が正しくないことがわかります。RFC2388によると、マルチパートリクエストの各アイテムは(ファイルだけでなく)コンテンツタイプを持つ必要があるため、Railsは実際にはそれがファイルであるかどうかを判別するためのcontent-typeヘッダー。まぁ。

于 2009-12-23T14:54:57.037 に答える
0

また、ColdFusionがフォームデータの各部分で同様のヘッダー(Content-Transfer-Encodingを除く)を送信していたため、上記のソリューションも使用しました。もっと良い方法があるのだろうか。

編集:これがRails 3で修正されているかどうか誰か知っていますか?

于 2010-09-08T20:45:11.107 に答える
0

どのようなエラーが発生しますか?何かのようなもの

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

あなたの問題を説明することができるRackに問題があります。https://github.com/rack/rack/issuesearch?state=open&q=rewind#issue/116を参照してください

于 2011-02-14T05:28:15.957 に答える
0

同様の問題も発生していました。上記の回答に加えて、X-CSRF-TokenそのリクエストでHTTPヘッダーマネージャーのを相互に関連付け、必要なメディアを必要な回数だけアップロードすることができました。

于 2015-06-11T09:53:53.100 に答える