Apache Jmeter は 100% pure Java で作られたデスクトップ・アプリケーションで、 Webアプリに代表されるようなクライアント/サーバ側ソフトウェアの 負荷テストを行うためのツールです。 静的ファイル、Java サーブレット、CGI スクリプト、Java オブジェクト、 データベース、FTP サーバといった、静的および動的なリソースに関する パフォーマンスを測定するのに利用できます。さらに、 高負荷状態のサーバ/ネットワーク/オブジェクトをシミュレートしながら それらの性能を測定したり、 システム全体のパフォーマンスを分析するのにも使えます。
また Jmeter では、 あなたの作ったアプリケーションが期待する結果を返しているかを検証するための アサーション(成立条件チェック)やテストスクリプトを組み込むことで、 アプリケーションのリグレッション(回帰)テストを行うことができます。 柔軟性を十分に発揮できるように、Jmeter では正規表現を使ってこれらの アサーションを作成できます。
ただし、あくまでも Jmeter はブラウザではなく、 (HTTP 等の)プロトコルレベルで動作するツールです。
Apache Jmeterのダウンロードページ からApache Jmeter 2.11(zip)をダウンロードし、 Windows ならデスクトップ、Linux ならホームディレクトリ直下に展開します。 Windows で普段使っていたLhaplus 1.59では解凍時に警告が出たので (解凍後のパスが長すぎるから?) ALZip(アルジップ)無料バージョン 8.61.1.0 というのを入れて無事に解凍OK。これでインストールは完了です。
なお Jmeter は Java アプリなので、 事前にJRE/JDKあたりを入れておく必要があります。
使っていくにつれて bin 配下が汚れがちになるので、 解凍直後の状態を参考までに記載しておきます。 bin には以下のファイルが入っています。
ファイル名 | 用途 |
---|---|
ApacheJMeter.jar | Jar ファイル(本体) |
BeanShellAssertion.bshrc | Sample BeanShell Assertion initialisation file |
BeanShellFunction.bshrc | Sample BeanShell Function initialisation file |
BeanShellListeners.bshrc | Example BeanShell Listener definitions |
BeanShellSampler.bshrc | Sample BeanShell Sampler initialisation file |
examples/ | 設定例 |
hc.parameters | Apache HttpClient の通常パラメータを上書きするファイル。jmeter.propertiesからインクルードされる。 |
heapdump.cmd | ヒープダンプ取得コマンド(Windows) |
heapdump.sh | ヒープダンプ取得コマンド(Unix/Linux) |
httpclient.parameters | Commons HttpClient の通常パラメータを上書きするファイル。jmeter.propertiesからインクルードされる。 |
jaas.conf | 認証モジュール設定ファイル |
jmeter | GUI 起動用コマンド詳細版(Unix/Linux) |
jmeter-n-r.cmd | 非GUI 起動用コマンド(Windows NT/2000) |
jmeter-n.cmd | 非GUI 起動用コマンド(Windows NT/2000) |
jmeter-report | レポート出力用コマンド(Unix/Linux) |
jmeter-report.bat | レポート出力用コマンド(Windows) |
jmeter-server | リモート起動用コマンド(Unix/Linux) |
jmeter-server.bat | リモート起動用コマンド(Windows) |
jmeter-t.cmd | GUI 起動用コマンド(Windows NT/2000/XP) |
jmeter.bat | GUI 起動用コマンド(Windows) |
jmeter.properties | GUI 用システムプロパティ |
jmeter.sh | GUI 起動用コマンド簡易版(Unix/Linux) |
jmeterw.cmd | Javaw 経由の起動用コマンド(Windows NT/2000) |
krb5.conf | ケルベロス設定ファイル |
log4j.conf | Log4J用の設定ファイル |
logkit.xml | logkit 用の設定ファイル |
mirror-server.cmd | Jmeter のミラーサーバを非GUIモードで起動(Windows) |
mirror-server.sh | Jmeter のミラーサーバを非GUIモードで起動(Unix/Linux) |
saveservice.properties | シンボルテーブル(変更しないこと) |
shutdown.cmd | 非GUIクライアントのシャットダウン(Windows) |
shutdown.sh | 非GUIクライアントのシャットダウン(Unix/Linux) |
stoptest.cmd | 非GUIクライアント用テスト中止コマンド(Windows) |
stoptest.sh | 非GUIクライアント用テスト中止コマンド(Unix/Linux) |
system.properties | Java 環境設定ファイル |
templates/ | テンプレートディレクトリ |
upgrade.properties | アップグレード用プロパティ |
user.properties | ユーザープロパティ |
以下は今後作成するテスト計画の内容を保存するファイルです。
ファイル名 | 用途 |
---|---|
*.jmx | テスト計画本体 |
以下は実行時に生成されるファイルです。トラブル時に役立ちます。 不要なら消しても構いません。
ファイル名 | 用途 |
---|---|
hs_err_pid*.log | Java実行時エラーログ |
java_pid*.hprof | 実行時ヒープダンプファイル(バイナリ) |
jmeter.log | 実行時ログ |
apache-jmeter-2.11/bin 配下の jmeter.bat(Windows) または jmeter(Linux)を起動。 起動直後は左のような画面になります。
画像はほぼ1/2の大きさで表示しています。 「新しいタブで画像を開く」と本来の大きさで表示されます(以下同様)。
左側のツリーの中に「テスト計画」と「ワークベンチ」
という2つのツリーがあります。
「テスト計画」は現在アクティブになっている計画
(テスト実行指示パラメータ)です。
(開始)をクリックすると、
現在のテスト計画に従って即座にテストが行われます。
テスト計画をカスタマイズする際に、 ある条件を一時的に無効にしたい場合は、 その条件を「ワークベンチ(作業台)」にドラッグして移動します。
ここでは標準で用意されているテンプレートシナリオを元に、 Jmeter の機能を概観しています。 「ファイル」>「開く」で bin/templates を開いてみてください。 以下のファイルが入っています。
ファイル名 | 用途 |
---|---|
BeanShellSampler.jmx | BeanShellサンプラー。 BeanShell(Java用の軽量スクリプト言語らしい)でスクリプトを書いて直接実行できます。 |
build-adv-web-test-plan.jmx | ログイン処理等を含む、やや複雑な Web アクセステスト |
build-ftp-test-plan.jmx | FTP サーバへの比較的単純なアクセステスト |
build-ldap-ext-test-plan.jmx | LDAP サーバに対するアクセステスト |
build-ldap-test-plan.jmx | LDAP サーバに対するアクセステスト用テンプレート (ループコントローラ利用) |
build-web-test-plan.jmx | Web サーバに対する比較的単純なアクセステスト |
build-webservice-test-plan.jmx | SOAP を使った Web サーバに対するアクセステスト |
jdbc.jmx | PostgreSQL に対する JDBC 経由のアクセステスト |
mongodb.jmx | JSR233(Scripting for the Java Platformらしい) を使った mongodb に対するアクセステスト |
recording.jmx | 記録コントローラ(ユーザの操作を記録してテスト計画を自動作成する) 利用時テンプレート |
Web サーバに対する比較的単純なアクセステストを サンプルとして開いてみましょう。 「ファイル」>「開く」で bin/templates/build-web-test-plan.jmx を開き、 "JMeter Users"の左の○をクリックするとツリーが開きます。
このテンプレートは実在のホスト jmeter.apache.org をアクセスする ように設定されており、そのまま実行できます。
(開始)をクリックすると実行が始まります。実行中の状態で "Graph Results" をクリックすると、 実行状態のグラフがリアルタイムで表示されます。
数秒で実行が完了するので、再度テスト開始ボタンを押すと、 グラフはその続きから描画されます。同じテストを繰り返すたびに、 赤で表示される「偏差」(測定のばらつき)が徐々に小さくなっていきます。
それでは、build-web-test-plan で定義されているテスト計画について 見ていきましょう。
ツリーのトップにある build-web-test-plan をポイントした時の画面。 ここはテスト計画のグローバル定義画面です。 最初のうちは触らなくても大丈夫でしょう。
なお日本語環境において、 新規作成の際のこの画面のデフォルトの名前は「テスト計画」です。
メニューからヘルプを選ぶと、 別ウィンドウでその画面の詳細なヘルプ(Webページ)が表示されますが、 残念ながらすべて英語です。 なお、表示されているヘルプ画面の内容は Apache Jmeter - Documentation - Component Reference と同じです。以下、ヘルプから抜粋して必要最小限の説明を行います。
JMeter Users をポイントした時の画面。 スレッドグループを定義する画面です。
なお日本語環境において、 新規作成の際のデフォルトの名前は「スレッドグループ」です。
スレッドグループは、
ある一連のテストを一斉に実行するユーザー(クライアント)のグループです。
1つのテスト計画の中で複数のスレッドグループを作れます。
新しいスレッドグループを追加するには、
ツリーのトップ(テスト計画名)をポイントして右クリックし、
>追加>Threads(Users)>スレッドグループをクリックします。
スレッドグループにおける主な設定項目は以下の通りです。 * が付いているのは必須項目、 (*) は他の条件次第で必須です。
サンプラーはクライアントからの何らかのアクションです。
たとえばWebサーバのテストであれば、
あるURLをリクエストするためのサンプラーとして
「HTTPリクエスト」を選択します。
サンプラー追加の際は、スレッドグループで右クリックして>追加>サンプラー>
HTTPリクエストの順に選択します。他にも様々なサンプラーがあるので
覗いてみてください。
この例では "Jmeter Users" というスレッドグループにぶら下がっている
"Home Page" と "Changes"がサンプラーです。
それぞれ、ホームページと Changes ページへのリクエスト(表示要求)です。
ここでは、たとえばサーバがエラーを返してきた場合など、 リクエストが何らかの原因でエラーになった際どうするかを選択できます。
一連のテストでHTTPリクエストを複数発行するなど、 HTTPリクエストを複数回使用する場合は、 この画面で共通パラメータを設定できます。選択は任意です。 選択する場合はスレッドグループで右クリックして、 >追加>設定エレメント>HTTPリクエスト初期値設定を選びます。
今回の例では、共通パラメータとしてリクエスト先のサーバ名 jmeter.apache.org が設定してあります。
設定できる項目はHTTPリクエストと同じなので、 詳細はHTTPリクエストで解説します。
WebサーバーへのHTTP/HTTPSリクエストを定義するサンプラー画面です。 ツリーでこの次にある "Changes" についても、 名前とパスの指定が異なるだけで、後はこの画面と全く同じです。
HTTPリクエストを追加する場合はスレッドグループで右クリックして、 >追加>設定エレメント>HTTPリクエストを選びます。
本画面で未入力の項目については、 前述の「HTTPリクエスト初期値設定」があればその値が使われます。
今回の例では、共通パラメータとしてリクエスト先のサーバ名 jmeter.apache.org が設定してあります。
設定できる項目は以下の通りです:
「自動リダイレクト」を有効にしている場合、クッキーは最初の URL に対してのみ送られる。このため、ローカルサーバへのリダイレクトをする Web サイトが予期しない動作を起こすことがある。
たとえば、www.example.com が www.example.co.uk にリダイレクトするケースを考えてみる。この場合、サーバはおそらく両方の URL に対するクッキーを返す。しかし JMeter には最後のホストの分、すなわち www.example.co.uk のクッキーしか見えない。もしテスト計画にある次のリクエストが www.example.co.uk ではなく www.example.com を使っている場合、 正しいクッキーを受け取れなくなる。同様に、 ヘッダは最初のリクエストに対して送られ、リダイレクトに対しては送られない。
マニュアルでテスト計画を作成する場合、この動作は一般的に問題となる。 一方レコーダーを使って作成されたテスト計画であれば、 リダイレクトされた URL からテストが続けられる。
ここまでで、ある程度どんなことができそうかが見えてきたと思います。 これまでは HTTP リクエストにに関することがほとんどでしたが、 Jmeter は汎用的に作られており、HTTP 以外にもいろいろな設定が可能です。
ここからは、テスト計画に対して 右クリック>追加 から追加できる様々な コンポーネントについて見ていくことにします。 設定項目名のリンク先は本家の(英語)ドキュメントを向けています。
名前 | 概要 |
---|---|
setUp Thread Group | テスト前のアクションを実行するスレッドグループ。 通常のスレッドグループとほぼ同じですが、 通常のスレッドグループの実行に先立って実行されます。 |
tearDown Thread Group | テスト後のアクションを実行するスレッドグループ。 通常のスレッドグループとほぼ同じですが、 通常のスレッドグループの実行が終わってから実行されます。 |
スレッドグループ | 通常のグループ(前述) |
名前 | 概要 |
---|---|
Test Fragment | Include Controller や モジュールコントローラ と組合せて使います。 |
名前 | 概要 |
---|---|
CSV Data Set Config | 変数の中に読み込んでおくべき値を CSV ファイルで与える |
FTP リクエスト初期値設定 | FTP 接続テスト時のデフォルト値を設定する |
HTTP Cache Manager | HTTP リクエストのスコープに対してキャッシュ機能を追加する |
HTTP クッキーマネージャ | HTTP リクエストにおいてクッキーを扱う機能を追加する |
HTTP ヘッダマネージャ | HTTP リクエストのヘッダを追加または上書きする |
HTTP リクエスト初期値設定 | HTTP 接続テスト時のデフォルト値を設定する |
HTTP 認証マネージャ | 制限されたページヘのログインなどの認証機能を追加する |
Java リクエスト初期値設定 | Java テスト時のデフォルト値を設定する |
JDBC Connection Configuration | JDBC の接続設定を行う |
Keystore Configuration | キーストアの設定を行う |
LDAP Extended Request Defaults | LDAP拡張リクエスト のための設定を行う |
LDAP リクエスト初期値設定 | LDAPリクエスト のための設定を行う |
MongoDB Source Config | MongoDB Script サンプラーのための接続設定を行う |
Random Variable | ランダム文字列を生成する |
TCP サンプラー設定 | TCP サンプラーのデフォルト設定を行う(任意の文字列を送る、など) |
カウンタ | スレッドグループの中から参照可能なカウンタを生成する |
シンプル設定エレメント | サンプラー中に任意の値を追加したり上書きしたりする |
ユーザ定義変数 | スレッドグループの中から参照可能な任意の変数を定義する |
ログイン設定エレメント | ユーザ名とパスワードの設定を行う |
名前 | 概要 |
---|---|
BeanShellタイマ | BeanShell を使ったタイマー |
BSFタイマ | BSF スクリプトを使ったタイマー |
JSR223タイマ | JSR223 スクリプトを使ったタイマー |
Poisson Random Timer | 各スレッドリクエストのたびにランダム時間停止する。 停止時間能総計はポアソン分布の値になる。 |
Synchronizing Timer | X個のスレッドがブロックするまでスレッドをブロックし、それら同時に開放する。 テスト計画の様々な場所で瞬間的な高負荷を与えることが可能。 |
ガウス乱数タイマ | 各スレッドリクエストのたびにランダム時間停止するが、 インターバル時間のほとんどは特定の値の近辺になる。 遅延時間の総計はガウス分布に従う(中央値 0、標準偏差 1.0)。 |
一様乱数タイマ | 各スレッドリクエストのたびにランダム時間停止するが、 停止間隔は一様乱数に従う。 遅延時間の総計は乱数値+オフセット値の合計。 |
定数スループットタイマ | トータルのスループットが一定値に近づくように停止時間を調整する。 |
定数タイマ | 各スレッドリクエストのたびに指定した秒数分遅延する。 |
名前 | 概要 |
---|---|
BeanShell PreProcessor | サンプルを実行する前に任意のコードを適用する |
BSF PreProcessor | サンプルを実行する前に BSF スクリプトを適用する |
HTML リンクパーサ | HTML 応答を解析してリンクとフォームを抽出する |
HTTP URL-Rewriting 修飾子 | URL 書き換えを行うタイプの Web サービスでセッションの引き回しを行う |
JDBC PreProcessor | テストに先立って SQL ステートメントを実行する。 テスト用に任意のデータを予め入れておきたい場合等に使う。 |
JSR223 PreProcessor | サンプルを実行する前に JSR223 スクリプトを適用する |
RegEx User Parameters | HTTP リクエストから正規表現を使ってパラメータを抽出する。 これで取得した値を別の HTTP パラメータに対して設定可能。 |
ユーザーパラメータ | 個別のスレッドに対してユーザ変数を設定する |
名前 | 概要 |
---|---|
BeanShell PostProcessor | サンプルを実行した後に任意のコードを適用する |
BSF PostProcessor | サンプルを実行した後に BSF スクリプトを適用する |
CSS/JQuery Extractor | CSS/JQuery ライクなセレクタの文法を使ってサーバの応答から値を抽出する。 |
Debug PostProcessor | 直前のサンプラーのプロパティ、Jmeter の変数やプロパティ、 システムのプロパティ等からサブサンプルを生成する。 これらの値はリスナー応答データペインの「結果をツリーで表示」で参照可能。 |
JDBC PostProcessor | サンプルを実行した直後に SQL ステートメントを実行する。 テスト後に状態を元に戻したい場合等に使う。 |
JSR223 PostProcessor | サンプルを実行した後に JSR223 スクリプトを適用する |
XPath Extractor | 構造化応答(XML/(X)HTML)から XPath クエリー言語を使って値を抽出する |
アクションハンドラの終了状態 | 関係するサンプラーが失敗したら、レッドまたはテスト全体を終了する |
正規表現抽出 | Perl 互換正規表現を使ってサーバ応答から値を抽出する。 後処理用ハンドラとしては、 このエレメントはそのスコープにおいて各サンプルの後で実行され、 正規表現を適用し、リクエストされた値を抽出し、 テンプレート文字列を生成して結果を与えられた変数名に格納する。 |
名前 | 概要 |
---|---|
BeanShell アサーション | BeanShell スクリプトを使ってアサーションチェックを実行する |
BSF Assertion | BSF スクリプトを使って直前のサンプルの状態をチェックする |
Compare Assertion | スコープの範囲内でサンプルの結果の比較を行う。 大量のリソースを消費するので負荷テスト時は使用しないこと。 |
HTML Assertion | JTidy を使って応答データの HTML 文法をチェックする |
JSR223 Assertion | JSR223F スクリプトを使って直前のサンプルの状態をチェックする |
HTML Assertion | JTidy を使って応答データの HTML 文法をチェックする |
MD5Hex アサーション | 応答データの MD5 ハッシュをチェックする |
SMIME Assertion | Mail Reader サンプラーの結果を受け取り、 MIME メッセージのボディ部分が署名されているかどうかをチェックする |
XML Schema Assertion | XML スキーマに対する応答を検証する |
XML Assertion | 応答データの XML ドキュメントの書式が正しいかをテストする。 ただし DTD 等のバリデーションまでは行わない。 |
XPath Assertion | ドキュメントが well-formed であるかや DTD に対するバリデーションのオプションを持つかをテストするか、 もしくは JTidy を通して XPath のテストを行う。 |
アサーション | 応答の中の様々な項目と比較するためのパターン文字列を設定する。 パターン文字列には Perl 互換の正規表現かプレインテキストを指定可能。 |
アサーションの持続 | それぞれの応答を与えられた時間内に受け取ったかどうかをテストする。 制限時間を越えて受信した応答は失敗としてマークされる。 |
サイズアサーション | それぞれの応答のサイズ(バイト数)が正しいかをテストする。 等しい、より大きい、より小さい、等しくない、が指定可能。 |
名前 | 概要 |
---|---|
Aggregate Graph | Aggregate Graph(集約グラフ)はAggregate Reportと似ている。 大きな違いとしては、集約グラフは簡単に棒グラフを作成でき、 またそのグラフを PNG ファイルとして保存できる。 |
BeanShell Listener | BeanShell を使ってサンプルを保存したりするなどの処理を行う。 |
BSF Listener | サンプルの結果に対して BSF スクリプトコードを適用する。 |
Comparison Assertion Visualizer | Compare Assertionエレメントの結果を表示する。 |
Distribution Graph (alpha) | 応答時間としてユニークな値が発生するたびにバーを表示する。 リソースを消費するので負荷テストの場合は使用しないこと。 |
JSR223 Listener | サンプルの結果に対して JSR223 スクリプトコードを適用する。 |
Response Time Graph | テストの進行に従って変化する応答時間の折れ線グラフを描画する。 同じタイムスタンプで複数のサンプルがある場合は中央値を表示する。 |
Summary Report | それぞれの異なった名前のリクエストについて表形式のレポートを作成する。 Aggregate Report と似ているが、あれほどはメモリは喰わない。 |
Assertion Results | アサーションのビジュアライザは試行された各サンプルのラベルを表示する。 テスト計画の一部の失敗したアサーションも報告する。 リソースを消費するので負荷テストの場合は使用しないこと。 |
Graph Results | すべてのサンプル時間についてのシンプルなグラフを生成する。 グラフの下の方から、現在のサンプル(黒)、 現在の全サンプルの平均(青)、現在の標準偏差(赤)、 現在のスループットレート(緑)がミリ秒単位で表示される。 リソースを消費するので負荷テストの場合は使用しないこと。 |
Simple Data Writer | このリスナは結果をファイルに記録するが UI には出さない。 これは GUI を使うことによる余計なオーバーヘッドを避けるため。 CLI で起動する場合は -l フラグでデータファイルを作成できる。 保存するフィールドは JMeter properties で定義可能。 詳細は jmeter.properties を参照のこと。 |
Spline Visualizer | サンプルの選択数に関わらず、 テスト開始から終了までのすべてのサンプル時間のビューを提供する。 スプライン曲線には10個の点があり、 ぞれはサンプルの10%を表している。 ぞれはスプラインロジックで連結され、 一つの連続した線として表示される。 グラフはウィンドウの中で自動的にスケールされるため、 比較の際には注意が必要。 リソースを消費するので負荷テストの場合は使用しないこと。 |
メーラービジュアライザ | テストがサーバから多数の失敗応答を受信するとメールを送ります。 |
モニタ結果 | サーバのステータスを表示するモニタ。Tomcat 5 用に設計されているが、 どのサーバコンテナでもステータス・サーブレットを移植できるので、 このモニタを利用可能。 Tomcat 5 以上が必要。 |
応答をファイルへ保存 | このテストエレメントはテスト計画のどこにでも設定可能。 各サンプルは自らのスコープにおいて、応答データのファイルを生成する。 基本的には機能テストにおいて使われるが、 「結果をツリーで表示」リスナーでサーバからの巨大な応答を表示する のにも利用可能。 |
結果の概要を作成 | このテストエレメントはテスト計画のどこにでも設定可能。 その時点までの結果サマリーをログファイルまたは標準出力に生成する。 実行と差分合計が表示される。出力はn秒(デフォルトは3分)毎に 行われ、同時に行われる複数のテストは同期が取られる。 設定項目は jmeter.properties ファイルを参照のこと。 |
結果をツリーで表示 | 全サンプルに対する応答をツリー形式で表示する。 ドロップダウンリストにより表示する応答の種類を選択可能。 大量のメモリを消費する。 |
結果を表で表示 | 各サンプル毎の行を生成する。 デフォルトで表示するのはメイン(親)サンプルのみ。 "Child samples?" にチェックを入れればサブ(子)サンプルも表示する。 大量のメモリを消費する。 |
統計レポート | テストにおける異なった名前のリクエスト毎に表の行を生成する。 |
これまでは、テスト計画全体に対して追加できるコンポーネントについて説明しました。 ここからは、スレッドグループに対して 右クリック>追加 から追加できる様々な コンポーネントについて見ていくことにします。
テスト計画全体と重複しているコンポーネントについては前述の説明を参照してください。 なお、設定項目名のリンク先は本家の(英語)ドキュメントを向けています。
ロジックコントローラはループや条件分岐など、 複雑な制御を行うためのコンポーネントです。
名前 | 概要 |
---|---|
ForEach コントローラ | 関連する変数の組合せの値を順に変えながらループします。 サンプラー(またはコントローラ)を ForEach コントローラに追加すると、 それぞれのサンプラー(またはコントローラ)が変数の値を変えながら 各サンプル毎に1回以上実行されます。 |
If コントローラ | 条件分岐を行う。条件は JavaScript または変数表現で指定する。 後者の場合は "Interpret Condition as Variable Expression?" にチェックを入れる。 |
Include Controller | 外部 jmx ファイルのインクルードを行う。 ファイル名指定では変数/関数は使えない。 includecontroller.prefix プロパティでパス名のプリフィックスを制御可能。 |
Runtime Controller | 子供の実行時間の上限を設定する。 |
Switch Controller | 繰り返しのたびに配下のエレメントのいずれかを実行するが、 それらを順に選ぶのではなく、スイッチの値に従って選ぶ。 スイッチには起動したいエレメントの名前または番号(0オリジン) をセットする。 |
While Controller | 指定した条件が "false" になるまで子供を実行する。 |
インターリーブコントローラ | インターリーブコントローラに対して生成的コントローラまたは ループコントローラを追加すると、 繰り返しループのたびに他のコントローラの間に挟まった形で実行する。 |
シンプルコントローラ | 他のサンプラーやロジックコントローラをまとめるもの。 他のロジックコントローラと異なり、 ストレージデバイスに対する機能的な処理は特に何も行わない。 |
スループットコントローラ | 名前が適切ではないのだが、 このコントローラはスループットを制御するものではない。 スループットを調整するには タイマ>定数スループットタイマ を参照して欲しい。 スループットコントローラは実行の頻度を制御するもので、 パーセント実行と全体実行という2つのモードがある。 |
トランザクションコントローラ | ネストしたテスト要素の実行に要した時間を測定するための 追加サンプルを生成する。 |
モジュールコントローラ | 現在のテスト計画に対して、 実行時に代替のテスト計画フラグメントのためのメカニズムを提供する。 テスト計画フラグメントはコントローラとすべてのテスト要素 (サンプラー等)から構成される。 フラグメントはどのスレッドグループやワークベンチ上にあってもよい。 フラグメントがスレッドグループにある場合、フラグメントが実行 されないように例外としてそのコントローラを無効にできる。 またはフラグメントをダミーのスレッドグループに入れて、 スレッドグループ全体を無効にすることもできる。 |
ランダム順序コントローラ | シンプルコントローラと同様に各子要素を高々1回実行するが、 ノードの実行順序はランダムとなる。 |
ループコントローラ | ループコントローラに対して生成的コントローラまたは ロジックコントローラを追加すると、それらを特定回数分実行する。 |
一度だけ実行されるコントローラ | 当該コントローラ配下をスレッド毎に一度だけ実行する。 |
乱数コントローラ | インターリーブコントローラと同様だが、 サブコントローラとサンプラーを順々に実行するのではなく、 それぞれのパスのたびに1つをランダムに実行する。 |
記録コントローラ | プロキシサーバにサンプルの記録場所を指定するためのプレースホルダ。 シンプルコントローラと同様に、テストの実行中は何もしない。 ただし HTTP(s) Test Script Recorder を使っての記録中は、デフォルトでは記録コントローラに 記録されたすべてのサンプルが保存される。 |
サンプラーはサーバなどの試験対象に対して、 何らかの指示やリクエストを行うためのコンポーネント。 サンプラーによりサンプル結果が生成され、 それらの結果はリスナーにより参照できる。
名前 | 概要 |
---|---|
Access Log Sampler | (実験中機能)アクセスログを読んで HTTP リクエストを生成する |
AJP/1.3 Sampler | HTTP リクエストのひとつ |
BeanShellサンプラー | BeanShellスクリプト言語を使ってサンプラーを書く |
BSF Sampler | BSFスクリプト言語を使ってサンプラーを書く |
Debug Sampler | Jmeterの全変数/プロパティの値を書き出すサンプルを生成する |
FTPリクエスト | FTPサーバに対してファイルの取り出し/アップロードのリクエストを送る |
HTTPリクエスト | Webサーバに対してHTTP(s)リクエストを送る。 また取得したコンテンツをパースして、 リンク先の画像や埋め込みリソースを取り出すためのリクエストを送ることも可能。 |
Javaリクエスト | org.apache.jmeter.protocol.java.sampler.JavaSamplerClient インターフェイスを実装する Java クラスを制御する。 |
JDBC Request | データベースに対してJDBCリクエスト(SQLクエリー)を送る |
JMS_Point-to-Point | (ベータ機能)ポイントツーポイント(キュー)を通して JMSメッセージを受信する。 |
JMS Subscriber | (ベータ機能)指定された宛先(トピック/キュー)に対する メッセージを購読する。 |
JSR223 Sampler | JSR223スクリプト言語を使ってサンプラーを書く |
JUnit Request | 現在の実装では標準的な Junit の慣習と拡張機能をサポートしている |
JUnit Request | 現在の実装では標準的な Junit の慣習と拡張機能をサポートしている |
LDAP Extended Request | 8種類の異なったLDAPリクエストを送る。 より実際のLDAPセッションに近いシミュレーションが行える。 |
Uncaught Exception java.lang.OutOfMemoryError: OutOfMemoryError. See log file for details.というエラーメッセージが残っているかもしれません。 また jmeter.log ファイルにも、たとえば以下のように原因が記載されます。
2014/09/08 10:17:04 ERROR - jmeter.JMeter: Uncaught exception: java.lang.OutOfMemoryError: OutOfMemoryError at sun.awt.windows.WToolkit.eventLoop(Native Method) at sun.awt.windows.WToolkit.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
テストで使用中の端末にメモリの余裕があれば、jmeter{,.bat}ファイルの以下の行でヒープ領域が増やせます。
set HEAP=-Xms512m -Xmx512m
-Xms はメモリ割り当てプールの初期サイズ、-Xmx が最大サイズです。 デフォルトでは、いずれも 512m(512MB) になっています。
筆者が行った実践例を参考までにご紹介します。 この設定では、実行中に Jmeter がメモリ不足で異常終了したため、 ヒープを 1GB(1024MB) に増やして実行しました。
コンポーネント | 設定項目 | 設定値 |
---|---|---|
スレッドグループ | サンプラーエラー後のアクション | テスト停止 |
スレッド数 | 400 | |
Ramp-Up期間(秒) | 20 | |
ループ回数 | 1 | |
ユーザー定義変数 | vhost | www.example.com |
HTTPリクエスト初期値設定 | サーバ名またはIP | ${vhost} |
Implementation | HttpClient4 | |
プロトコル | http | |
トランザクションコントローラ | (特になし) | |
トップページ(初回) | パス | / |
全てのイメージとアプレットを繰り返しダウンロードする | 有効 | |
ループコントローラ | ループ回数 | 10 |
トップページ(リトライ) | パス | / |
全てのイメージとアプレットを繰り返しダウンロードする | 無効 | |
一様乱数タイマ | 最大遅延時間(ミリ秒) | 5000 |
想定するシナリオとしては以下のようになります。
ここもわかりやすそうです(英語): How to use Controllers in JMeter
サイトトップに戻る