JMeter


JMeterでSOAP/XML-RPC)リクエストのGZip圧縮改造
JMeterのSOAP/XML-RPC)リクエストを改造してGZip圧縮してリクエストを送信できるようにしたいと思います。 ここからjakarta-jmeter-1.9.1.src.tgzを取得して改造しました。 jakarta-jmeter-1.9.1プロジェクトとしてCVSに保存しました。 改造点は以下の通りです。 ・HTTPSampler.javaの変更点 ・SoapSampler.javaの変更点 ・SoapSamplerGui.javaの変更点 build.batを実行すればJMETER_HOME/lib/extにApacheJMeter_http.jarが出力されます。 このApacheJMeter_http.jarを使用するJMeterのlib/extのApacheJMeter_http.jarに上書きして、起動すれば以下の様になります。 動作の確認のためにjp.ikepon.app.gzipaxisservletsampleプロジェクトを作って試してみました。 これはAxisのAxisServletをGZip対応にしたサンプルです。 Axis初期起動サービスのVersion#getVersionで動作確認してみたいと思います。 JMeterの設定ファイルは以下の様な構成です。 ・テスト計画  ・スレッドグループ   ・HTTPヘッダーマネージャ   ・SOAP/XML-RPC)リクエスト HTTPヘッダーマネージャにはSOAPActionを追加しておきます。 そうしないと、AxisはSOAPメッセージと判断せずにエラーを返します。 SOAP/XML-RPC)リクエストは以下の様に設定します。 JMETER_HOME/binのjmeter.propertiesの以下の項目をDEBUGに変更すれば、jmeter.logにGZipで圧縮されたレスポンスの内容が解凍されて出力するようになっています。 log_level.jmeter=DEBUG 以下の様なログが出力されます。 02/01/2004 1:23:41 午後 DEBUG - jmeter.protocol.http.sampler.SoapSampler: GZip true(setPostHeaders) 02/01/2004 1:23:41 午後 DEBUG - jmeter.protocol.http.sampler.SoapSampler: GZip true(sendPostData) 02/01/2004...

JMeterのサンプラー拡張(プロパティ値設定)
引き続き、JMeterのサンプラーを拡張して新しいサンプラーの作成方法を勉強しようと思いました。 次に、画面から値を設定できるようにしようと思います。 文字列・数字・boolean型を設定できるようにします。 jp.ikepon.app.jmeter.protocol.echoconfigプロジェクトを作って試してみました。 build.xmlをAntで実行後、作成されたApacheJMeter_echoconfig.jarをJMETER_HOME/lib/ext/に配置して、JMeterを起動します。 すると以下のようにサンプラーの項目にEcho Testが追加されています。 画面の設定項目は以下の様になっています。 Echo Message:表示する文字列 Echo Count:文字列を表示する回数 Triple Parenthesis:文字列を囲む[]を[[[]]]に変更する 以下のように出力されました。 [[[Hello World]]][[[Hello World]]][[[Hello World]]][[[Hello World]]][[[Hello World]]]...

JMeterのサンプラー拡張
JMeterのサンプラーを拡張して新しいサンプラーの作成方法を勉強しようと思いました。 まず、コンソールにHello Worldを出力するサンプラーを作成しようと思います。 JMeterのドキュメントを参考にして拡張し様と思いましたが、ドキュメントを見てもあまり分からなかったので、JMeterのソースを参考にして拡張することにしました。 jp.ikepon.app.jmeter.protocol.echoプロジェクトを作って試してみました。 build.xmlをAntで実行後、作成されたApacheJMeter_echo.jarをJMETER_HOME/lib/ext/に配置して、JMeterを起動します。 すると以下のようにサンプラーの項目にHello Worldが追加されています。 画面の設定項目は名前しかない状態です。 以下のように出力されました。 Hello World...

JMeterで表示言語変更
メニュー→オプション→言語の選択で英語・日本語・ノルウェー語・ドイツ語を選択できるようになっています。 しかし、選択しても表示言語が変更されません。 ですから、以下の様に、起動ファイルでロケールを変更するとメニューが英語化されて起動されます。 java -Xincgc -Xmx256m -jar ApacheJMeter.jar %JMETER_CMD_LINE_ARGS% ↓(変更) java -Xincgc -Xmx256m -Duser.language=en -Duser.country=US -jar ApacheJMeter.jar %JMETER_CMD_LINE_ARGS%   ...

JMeterでデータベースの初期化
JMeterでデータベースがらみの負荷テストを行おうと思っています。 そうした場合、データベースの所定のテーブルを指定したデータで初期化しておきたい場合があると思います。 その場合どうすればいいのかと思い考えていました。 AntのSQLタスクで初期化用スクリプトファイルを実行するのがいいのかと思いました。 しかし、AntのSQLタスクを用いた場合、JMeterTaskを実行する前にSQLをタスクを実行しなければなりません。 1つのテーブルで複数の負荷テストから参照される場合、整合性が取れなくなる可能性があります。 ですから、負荷テストの粒度毎にデータベースのテーブルの初期化をしたいと思います。 それで、JMeterをいろいろと調べてみました。 すると、ロジックコントローラに一度だけ実行されるコントローラというのと、サンプラーにJDBCリクエストというのがありました。 これを組み合わせればできると思いました。 jp.ikepon.app.jmeterjdbcsampleプロジェクトを作って試してみました。 まず実験用のデータベースを作成しました。(Cygwin, PostgreSQL7.4) $ createdb.exe jmeter CREATE DATABASE 次にjmeter用のユーザを作成しました。 $ createuser.exe jmeter Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to...

JMeterTaskの拡張
JMterにはAnt用のJMeterTaskがextrasディレクトリに格納されています。 しかし、JMeterタスクにはJUnitタスクのerrorproperty・failurepropertyの様にエラーや失敗があった場合に指定したプロパティをtrueに設定するプロパティがありません。 ですので、JMeterTaskを拡張してAssertで失敗した場合に指定したプロパティをtrueに設定するプロパティを自作しようと思いました。 extrasディレクトリに格納されているant-jmeter.jarを展開すると、JMeterTaskのソースがあったのでそれを拡張しようと思います。 ant-jmeterプロジェクトを作って試してみました。 JMeterTaskの以下の部分を拡張ました。 ・String failurePropertyと、そのsetter ・実行結果のファイルにsuccess="false"という文字列があれば指定されたプロパティをtrueにセットするcheckFailure()メソッド 実行結果は以下の様になり、JMeterのAssertで失敗した場合は、きちんとプロパティにtrueがセットされていました。 Buildfile: C:\tool\eclipse\workspace\ant-jmeter\build.xml init: clean:   [delete] Deleting directory C:\tool\eclipse\workspace\ant-jmeter\dest\jmeterreport   [mkdir] Created dir: C:\tool\eclipse\workspace\ant-jmeter\dest\jmeterreport   [mkdir] Created dir: C:\tool\eclipse\workspace\ant-jmeter\dest\jmeterreport\xml   [mkdir] Created dir: C:\tool\eclipse\workspace\ant-jmeter\dest\jmeterreport\html main:   [jmeter] Executing test plan: C:\tool\eclipse\workspace\ant-jmeter\src\FailuresTest.jmx   [jmeter] Created the tree...