QA@IT

jmeterで0-255の任意の数値を送信する方法

5282 PV

でサーバーのtcp socketプログラムのテストのためにjmeterのtcpサンプラーを使っています。
ここで送信したいデータをASCIIコードとして解釈した文字を入力しておくことでそのデータが送信されます。
しかし128-255に対応する文字は0x3Fという数値で送られるようです。
この範囲の数値をテストデータとして使用する方法はないでしょうか?
もしかしてtelnetでやるときも同じ問題があるかもしれません。

回答

マニュアルを見るとバイナリデータを送れるようなことは書いてありますね。

Apache JMeter User's Manual: Component Reference

BinaryTCPClientImpl
This implementation converts the GUI input, which must be a hex-encoded string, into binary, and performs the reverse when reading the response. When reading the response, it reads until the end of message byte, if this is defined by setting the property tcp.BinaryTCPClient.eomByte, otherwise until the end of the input stream.

  • GUIの設定項目のうちTCPClient classnameをBinaryTCPClientImplにする
  • (追記)もしくはクラス名をtcp.handlerプロパティに設定する
  • GUI上で送信テキストを16進文字列で指定するとバイナリに変換して送信する
  • 応答を読むときは逆にバイナリから16進文字列に変換する
  • 応答の最後のバイトをtcp.BinaryTCPClient.eomByteプロパティに設定するとそこまでを読む
  • これを指定しないときは応答として入力ストリームの終端までを読む

追記(1)

TCPClient classname
Name of the TCPClient class. Defaults to the property tcp.handler, failing that TCPClientImpl.

GUI上のTCPClient classnameはデフォルトだとtcp.handlerプロパティになっていて、それが見つからなければTCPClientImpl(テキスト)になるので、バイナリにしたいときはどこかで明示的にBinaryTCPClientImpl(バイナリ)を指定する必要があるでしょう。

もしテキストとバイナリを混在させたいならTCPClientインターフェースを実装するクラスを自作する必要があるのではないかと思います。

Users can provide their own implementation. The class must extend org.apache.jmeter.protocol.tcp.sampler.TCPClient.

追記(2)
EOLがCR/LFだとしたら、送信のさいはEOLとして0D0A(16進)を送り、受信のさいはtcp.BinaryTCPClient.eomByteプロパティに最後のバイトである10(10進)を指定するということだと思います。

参考
http://d.hatena.ne.jp/poad1010/20120728/1343486016

編集 履歴 (2)
  • ありがとうございました。
    16進数でバイナリーを送信することができました。
    今はバイナリー、テキストともにEOLの設定がうまくいっていないところですがもう少し試行錯誤してダメそうなら相談します。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。