1

JMeterのHTTPプロキシで記録したいアプレットとサーブレットの通信があります。アプレットがいくつかのシリアル化されたJavaオブジェクト(組み込み型)を含むHTTP POSTメッセージを送信するまで、これはGETメッセージで機能します。その後、アプレットで次のエラーが発生します。

代替テキストhttp://img339.imageshack.us/img339/9238/appletservletjmeterhttp.png

OK、キューのどこかにJVMバージョンの競合があります。しかしここで?

通信は、JMeterがなくても正常に実行されます。つまり、アプレット->Tomcat->サーブレットです。すべて私のローカルマシン上にあります。

ただし、JMeterでは機能しません:アプレット->JMeterプロキシ->Tomcat->サーブレット。また、すべて私のマシン上にあります。

JMeterがPOSTメッセージの内容を変更しているかのようです...

Apacheプロキシでもテストしましたが、正常に動作しました。

さらに面白いのは、Javaのバージョンが1つ、JDKが1つ、JREが1つしかないことです。両方1.6.0_07..。

うさぎの穴を深く掘り始める前に聞いてみようと思いました;-)

Tomcatに直接送信されるPOSTデータの16進ダンプは次のとおりです。

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                                               {

2番目のダンプに多くの「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
4

3 に答える 3

4

これが解決策です。JMeter には構成ファイルbin/jmeter.propertiesがあります。ここでは、バイナリ コンテンツ タイプを設定できるオプションを見つけることができます。

# 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

application/octet-streamがデフォルトで含まれていない理由はわかりませんが、リストに追加するだけで完了です。

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のクローズドバグを検索しました... :-)

于 2010-01-22T08:29:25.020 に答える
0

受け入れられた回答では、静的リクエストの記録のみが許可されます。これは、リクエストの可変化 (検索単語の変更など) を許可しないため、現実的ではありません。そのため、常に同じ一連のデータのストレス テストを行うことになります。

実際のテストを行うには、サードパーティのプラグインを使用する必要があります。

商用の JMeter プラグインを使用すると、これが可能になります。以下を参照してください。

テストを現実的なものにするには、シリアル化されたオブジェクトのコンテンツを可変化する必要があります。

この Java シリアライゼーション プラグインにより、次のことが可能になります。

  • JMeter Proxy Server を使用したトラフィックの簡単な記録、カスタム サンプラーを使用したテスト プランの作成

  • ${searchedWord} のような簡単な構文によるリクエスト (XML として表示される) の簡単な可変化。searchedWord は CSV または任意のユーザー定義変数から取得できます。

  • JMeter 標準のポスト プロセッサを使用して、応答からデータを簡単に抽出

  • 標準の JMeter View Results Tree 要素によるリクエスト/レスポンスの簡単なデバッグ

免責事項:私はこの会社で働いています。

于 2013-09-09T19:50:07.680 に答える
0

他の誰かが非常によく似た報告をしています: http://markmail.org/message/pl5erin2isehm5q6 . ただし、バグトラッカーでこの問題に関連する問題は見つかりません。うさぎの穴を深く掘り下げる特権を獲得したようですね :)

于 2010-01-21T15:06:53.980 に答える