「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Apache Jmeter]] * 目次 [#hdfc82ff] #contents *概要 [#a340a542] -Jmeterで使用される用語を拾ってまとめた。 -Jmeterはプログラマブルなツールなので、~ コンポーネントとコンポーネント階層を理解しておく必要がある。 #ref(hierarchy.png,left,nowrap,階層) *テンプレート [#m630befd] -Visual Studio的に言うとプロジェクト・テンプレート的なもの。 -これを開いて、負荷テストを新規作成する。 **テンプレートの種類 [#g506f215] 以下のようなテンプレートが存在する。 ***Web サーバ [#m116aa6a] -build-web-test-plan.jmx~ 比較的単純な負荷テスト -build-adv-web-test-plan.jmx~ ログイン処理等を含む、やや複雑な負荷テスト -build-webservice-test-plan.jmx~ SOAP を使った 負荷テスト ***FTP サーバ [#s9bd4dee] -build-ftp-test-plan.jmx~ 比較的単純な負荷テスト ***LDAP サーバ [#q3540b16] -build-ldap-ext-test-plan.jmx~ 比較的単純な負荷テスト -build-ldap-test-plan.jmx~ ループコントローラ利用した負荷テスト ***ストレージ [#bd23c4da] -jdbc.jmx~ PostgreSQL に対する JDBC 経由の負荷テスト -mongodb.jmx~ JSR233を使った mongodb に対する負荷テスト ***その他 [#z9daa473] -recording.jmx~ 記録コントローラ(ユーザの操作を記録してテスト計画を自動作成する) 利用時テンプレート -BeanShellSampler.jmx~ Jmeter用の軽量スクリプト言語(BeanShell)でテストを書いて直接実行。 **プロパティ [#q5d94758] 以下の設定が可能。 ***グローバル定義画面 [#o3348332] [[テスト計画>#d2cb6164]]のグローバル定義 ***スレッドグループ定義画面 [#ib74057e] [[テスト計画のスレッドグループ>#rd4bf7fa]] *ワークベンチ [#e79d0c85] -ワークベンチとは、作業領域のこと。 --リクエスト記録領域 --測定結果データ領域 -特定のテストエレメントは、ワークベンチでのみ使用できる。 **HTTPプロキシサーバ [#e9c7b928] -HTTP(S) Test Script Recorder (旧 HTTP Proxy Server) -電文をキャプチャしてワークロードをスクリプトとして記録する機能。 -使用する場合、ワークベンチにこれを追加する。 **HTTP Mirror Server [#t65a636a] -送信されたデータを単にミラーリングする非常に単純なHTTPサーバー。 -HTTP要求の内容をチェックするのに便利。 **Property Display [#i41015f2] SystemプロパティまたはJMeterプロパティの値が表示される。 *テスト計画 [#d2cb6164] -負荷テストの実行計画を設定するもの。 -以下のプロパティ設定や、コンポーネント追加ができる。 **Threads(Users) [#rd4bf7fa] -スレッドグループ(仮想ユーザ群) -追加する場合、テスト計画で右クリック > 追加 > Threads(Users) > XXXXを選択。 ***Threads(Users)の種類 [#e1a2c37f] 以下の3種類のThreads(Users)がある。 -スレッドグループ~ 通常のスレッドグループ -setUp Thread Group~ テスト前のアクションを実行するスレッドグループ。 --通常のスレッドグループとほぼ同じ。 --通常のスレッドグループの実行前に実行される。 -tearDown Thread Group~ テスト後のアクションを実行するスレッドグループ。 --通常のスレッドグループとほぼ同じ。 --通常のスレッドグループの実行後に実行される。 ***プロパティ [#s4c36420] 以下のプロパティを設定。 -名前~ スレッドグループの名前(IDではない)。 -コメント~ スレッドグループの説明 -スレッド数~ 起動するスレッド数 ≒ 仮想ユーザ数 -Delay Thread creation until needed~ スレッドが必要になったタイミングで生成するオプション。 -ループ回数 --テスト・シナリオの実行回数 --[無限ループ]にチェックを入れると無限にテスト -Ramp-up期間(秒で指定)~ 多重度(仮想ユーザ数)を徐々に増加させるためのパラメタ。 -スケジューラ --開始時刻~ スケジューラが有効の場合、この時刻が来るまでテストの実施を待つ。~ ただし後述の起動遅延の指定があれば、そちらが優先される。 --終了時刻~ スケジューラが有効の場合、この時刻までテストが行われる。 --持続時間~ テストをこの時間だけ実行する --起動遅延~ この秒数だけテストの実行を遅延する --終了条件~ Jmeterのスレッドが終了する契機が、~ 以下の終了条件のうち、いずれか達成の早いものになる。~ 条件チェックは各サンプル間でのみ行われる。 ---指定のループ回数に達した時 ---終了時刻に達した時 ---持続時間に達した時 -サンプラーエラー後のアクション~ サーバがエラーを返してきた場合など、~ リクエストが何らかの原因でエラーになった際どうするかを選択する。 --続行~ エラーを無視してテストを続行 --Start Next Loop~ エラーを無視して次のループの最初から続行 --スレッド停止~ 現在のスレッドを終了 --テスト停止~ いずれかのサンプルの終了をもってテスト全体が停止 --Stop Test Now~ 即座にテスト全体を停止。 **サンプラー [#q4e53b30] -サーバなどのテスト対象に対し、何らかの指示やリクエストを行うためのコンポーネント。 -サンプラーにより負荷テスト結果が収集され、 この結果は[[リスナー>#h6cb67cf]]により参照できる。 -追加する場合、スレッドグループかロジックコントローラで右クリック > 追加 > サンプラー > XXXXを選択。 -様々なサンプラーがある。 --Webサーバのテストであれば、「[[HTTPリクエスト>JmeterによるWebアプリの負荷テスト#v288a329]]」を選択する。 --XXXサーバのテストであれば、「XXXXリクエスト」を選択する。 ***スクリプト系 [#b9e8bc07] |#|サンプラー名|説明|h |1|BeanShell Sampler|BeanShellスクリプト言語を使ってサンプラーを書く| |2|BSF Sampler (DEPRECATED)|BSFスクリプト言語を使ってサンプラーを書く| |3|JSR223 Sampler|JSR-223スクリプト言語を使ってサンプラーを書く| |4|Java Request|org.apache.jmeter.protocol.java.sampler.JavaSamplerClientを使用してリクエストを送りレスポンスを待つ。| |5|JUnit Request|JUnitを使用してリクエストを送りレスポンスを待つ。| ***プロトコル系 [#h803adc2] -セッション層 |#|サンプラー名|説明|h |1|TCP サンプラー|サーバに対してTCP リクエストを送りレスポンスを待つ。| -プレゼンテーション層 |#|サンプラー名|説明|h |1|[[HTTPリクエスト>JmeterによるWebアプリの負荷テスト#v288a329]]|Webサーバに対してHTTP(s)リクエストを送りレスポンスを待つ。| |2|FTPリクエスト|FTPサーバに対してファイルの取り出し/アップロードのリクエストを送る。| |3|LDAPリクエスト|4種類のLDAPリクエストを送る。 | |4|LDAP拡張リクエスト|8種類のLDAPリクエストを送る。&br;より実際のLDAPセッションに近いシミュレーションが行える。| |5|JDBC Request|JDBCでデータベースに対してSQLを送りレスポンスを待つ。| |6|MongoDB Script (DEPRECATED)|MongoDBに対してMongoDB Scriptを送りレスポンスを待つ。| -メール |#|サンプラー名|説明|h |1|SMTP サンプラー|SMTP / SMTPSプロトコルを使用してメールメッセージを送信。| |2|Mail Readerサンプラー|POP3(S)/IMAP(S)プロトコルを使用してメールメッセージを受信(オプションで削除)。| -JMS(Java Message Service) |#|サンプラー名|説明|h |1|JMS Publisher|指定された宛先(トピック/キュー)にメッセージを送信| |2|JMS Subscriber|指定された宛先(トピック/キュー)からメッセージを受信| |3|JMS_Point-to-Point|ポイントツーポイント接続(キュー)でメッセージを送受信| -その他 |#|サンプラー名|説明|h |1|OS Process Sampler|OSコマンドを実行する。| ***その他 [#x11e1fb4] |#|サンプラー名|説明|h |1|Access Log Sampler|Webサーバーのアクセスログを読んで HTTP リクエストを生成。| |2|Test Action|・・・| |3|[[Debug Sampler>#u542b2f5]]|・・・| **ロジックコントローラー [#k1b91458] -ループや条件分岐など、 複雑な制御を行うためのコンポーネント。 -追加する場合、スレッドグループかロジックコントローラで右クリック > 追加 > ロジックコントローラ > XXXXを選択。 -また、下位に[[サンプラー>#q4e53b30]](または子コントローラ)を追加できる。 ***制御構文系 [#j070c42d] -選択 |#|ロジックコントローラー名|説明|h |1|If Controller|指定した条件が "true"の場合、子コントローラーを実行する。条件は JavaScript または変数表現で指定。| |2|Switch Controller|スイッチの値に従って子コントローラーを実行する。| -ループ |#|ロジックコントローラー名|説明|h |1|Loop Controller|特定回数分、子コントローラーを実行する。| |2|While Controller|Whileで、指定した条件が "false"になるまでループしながら子コントローラーを実行する。| |3|ForEach Controller|ForEachで、変数の値を変えながらループして、子コントローラーを実行する。| ***その他 [#x72a653e] |#|ロジックコントローラー名|説明|h |1|Simple Controller|[[サンプラー>#q4e53b30]]、子コントローラーの整理のため。| |2|[[Module Controller>#naf69640]]|リンク先を参照。| |3|[[Include Controller>#fc3d5c3c]]|リンク先を参照。| 以下は、ググって。 -Once Only Controller -Interleave Controller -Random Controller -Random Order Controller -Throughput Controller -Runtime Controller -Transaction Controller -Recording Controller -Critical Section Controller **設定エレメント [#z1e392de] -リクエストにかかわる様々な項目を設定する。 -追加する場合、テスト計画 - サンプラーを右クリック > 追加 > 設定エレメント > XXXXを選択。 ***共通 [#e34d4c29] |#|設定エレメント名|説明|h |1|TCP サンプラー設定|TCP サンプラーのデフォルト設定| |2|ログイン設定エレメント|ユーザ名とパスワードの設定| |3|DNS Cache Manager|DNSキャッシュ機能を追加| ***プロトコル [#r2ee8f16] -HTTP |#|設定エレメント名|説明|h |1|HTTP 認証マネージャ|認証機能を追加| |2|HTTP クッキーマネージャ|クッキーを扱う機能を追加| |3|HTTP Cache Manager|HTTPキャッシュ機能を追加| |4|HTTP ヘッダマネージャ|ヘッダを追加または上書き| |5|HTTP リクエスト初期値設定|HTTP 接続テスト時のデフォルト値を設定| -その他、既定値 |#|設定エレメント名|説明|h |1|FTPリクエスト初期値設定|FTPリクエストのデフォルト値を設定| |2|LDAPリクエスト初期値設定|LDAPリクエストのデフォルト値を設定| |3|LDAP拡張リクエスト初期値設定|LDAP拡張リクエストのデフォルト値を設定| |4|Javaリクエスト初期値設定|Javaリクエストのデフォルト値を設定| -接続設定 |#|設定エレメント名|説明|h |1|JDBC Connection Configuration|JDBC の接続設定| |2|MongoDB Source Config (DEPRECATED)|MongoDB Script サンプラーのための接続設定を行う| ***データ [#z2b8eb4f] スレッドグループ以下のコンポーネントの中から参照可能なデータ |#|設定エレメント名|説明|h |1|Counter|カウンタを生成| |2|Random Variable|ランダム文字列を生成| |3|User Defined Variables|任意の初期変数セットを定義| |4|CSV Data Set Config|変数値を CSV ファイルで与える| ***その他 [#rd7163c5] |#|設定エレメント名|説明|h |1|Keystore Configuration|Java Key Store([[証明書]]ストア)を設定| |2|Simple Config Element|任意の値を追加・上書き(開発者向け)| **タイマ [#q9b692ef] -待機のためのコンポーネント。 -追加する場合、テスト計画 - サンプラーで右クリック > 追加 > タイマ > XXXX を選択。 ***スクリプト系 [#tb2f91d9] |#|タイマ名|説明|h |1|BeanShell Timer|BeanShell(JSR-274)を使ったタイマ| |2|BSF Timer (DEPRECATED)|BSFを使ったタイマ| |3|JSR223 Timer|JSR-223を使ったタイマ| |4|Synchronizing Timer|逆セマフォ的な動きをするタイマ(瞬間的な高負荷を与える)。| ***定数系 [#n935b31a] |#|タイマ名|説明|h |1|Constant Timer(定数タイマ)|各スレッドリクエストのたびに指定した秒数分遅延する。| |2|Constant Throughput Timer(定数スループット・タイマ)|トータルのスループットが一定値に近づくように停止時間を調整する。| ***乱数系 [#wbe1cf73] |#|タイマ名|説明|h |1|Uniform Random Timer|各スレッドリクエストのたびにランダム時間停止し、遅延時間の総計は乱数値+オフセット値の合計になるタイマ。| |2|Poisson Random Timer|各スレッドリクエストのたびにランダム時間停止し、停止時間能総計はポアソン分布に従うタイマ。| |3|Gaussian Random Timer|各スレッドリクエストのたびにランダム時間停止し、遅延時間の総計はガウス分布に従うタイマ。| **前処理 [#fd17d0ce] -前処理ためのコンポーネント。 -追加する場合、テスト計画 - サンプラーで右クリック > 追加 > 前処理 を選択。 ***スクリプト系 [#u819724e] |#|プリプロセッサ名|説明|h |1|BeanShell PreProcessor|BeanShellの前処理を実行| |2|BSF PreProcessor (DEPRECATED)|BSFの前処理を実行| |3|JSR223 PreProcessor|JSR-223の前処理を実行| |4|JDBC PreProcessor|SQLの前処理を実行| ***抽出系 [#z6bd4184] |#|プリプロセッサ名|説明|h |1|HTML Link Parser|応答を解析してリンクとフォームを抽出| |2|RegEx User Parameters|応答を[[正規表現>Jmeterの正規表現#t7251991]]を使って解析してパラメタを抽出| ***その他 [#w6d7e84c] |#|プリプロセッサ名|説明|h |1|Sample Timeout|タイマータスクが完了するまでに時間がかかりすぎると、&br;サンプルを中断するようにタイマータスクをスケジュールする。| |2|User Parameters|個別のスレッドに対してユーザ変数を設定| |3|HTTP URL Re-writing Modifier|URL 書き換えを行うWeb サービスでセッションの引き回す| **後処理 [#p2b49fc8] -後処理ためのコンポーネント。 -追加する場合、テスト計画 - サンプラーで右クリック > 追加 > 後処理 を選択。 ***スクリプト系 [#zd50e41d] |#|ポストプロセッサ名|説明|h |1|BeanShell PostProcessor|BeanShellの後処理を実行| |2|BSF PostProcessor (DEPRECATED)|BSFの後処理を実行| |3|JSR223 PostProcessor|JSR-223の後処理を実行| |4|JDBC PostProcessor|SQLの後処理を実行| ***抽出系 [#j6af55f2] |#|ポストプロセッサ名|説明|h |1|Regular Expression Extractor(正規表現抽出)|応答を[[正規表現>Jmeterの正規表現#t7251991]]を使って解析してパラメタを抽出| |2|CSS/JQuery Extractor|応答をCSS/JQuery ライクなセレクタの文法を使って解析してパラメタを抽出| |3|XPath Extractor|応答をXPath クエリー言語を使って解析してパラメタを抽出| |4|JSON Extractor|応答をJSONをJSON-PATH syntax使って解析してパラメタを抽出| ***その他 [#d9e3a42f] |#|ポストプロセッサ名|説明|h |1|[[Debug PostProcessor>#acf01819]]|・・・| |2|Result Status Action Handler|サンプラーが失敗したら、スレッドまたはテスト全体を終了する。| **アサーション [#q21233c4] -テストをしているサーバから受け取った応答を検査し、その応答が正しい応答かどうかをチェックするためのコンポーネント。 -追加する場合、テスト計画 - サンプラーで右クリック > 追加 > アサーション > XXXXを選択。 ***スクリプト系 [#xf496daa] |#|アサーション名|説明|h |1|BeanShell Assertion|BeanShellでアサーションチェックを実行| |2|BSF Assertion (DEPRECATED)|BSFでアサーションチェックを実行| |3|JSR223 Assertion|JSR-223でアサーションチェックを実行| ***検証系 [#a902fd86] |#|アサーション名|説明|h |1|Response Assertion|Perl 互換の正規表現かプレインテキストで比較チェック| |2|Compare Assertion|応答の比較チェック(大量のリソースを消費)| |3|HTML Assertion|JTidyを使って応答のHTML文法をチェック| |4|XML Assertion|応答のXML文法をチェック| |5|XML Schema Assertion|応答のDTDなどのXML Schemaへの準拠をチェック| |6|XPath Assertion|well-formed や DTDのオプションを持つかチェック、もしくは JTidy を通して XPathのチェック| |7|MD5Hex Assertion|JTidyを使って応答のMD5 ハッシュをチェック| |8|SMIME Assertion|Mail Readerサンプラーの応答の署名をチェック| ***その他 [#p90e6f63] |#|アサーション名|説明|h |1|Duration Assertion|応答を与えられた時間内に受け取ったかどうかをチェック| |2|Size Assertion|応答のサイズ(バイト数)が正しいか(等しい、より大きい、より小さい、等しくない)をチェック| **リスナー [#h6cb67cf] -テスト中に収集した情報を表示したりファイルへ保存したりして、結果をレポーティングするためのコンポーネント。 -[[CUI(non-GUI)モード>JmeterによるWebアプリの負荷テスト#r4107134]] --出力ファイルが構成されている場合はデータが保管される。 --出力ファイルのデータは、[[ワークベンチ>#e79d0c85]]の適切なリスナーにロードして分析する。 -追加する場合、テスト計画 - サンプラーで右クリック > 追加 > リスナー > XXXXを選択。 ***スクリプト系 [#b0e4ad50] |#|リスナー名|説明|h |1|BeanShell Listener|サンプルの結果に対して BeanShellを適用する。| |2|BSF Listener (DEPRECATED)|サンプルの結果に対して BSFを適用する。| |3|JSR223 Listener|サンプルの結果に対して JSR-223 を適用する。| ***機能テスト、デバッグ・検証用 [#ke3512f6] リソースの消費量が大きいので、負荷テスト時は削除するか設定を変更する。 -レポート用 |#|リスナー名|説明|h |1|View Results in Table(結果を表で表示)|すべてのサンプル結果の行を作成| |2|View Results Tree(結果をツリーで表示)|サンプル応答のツリーに、すべてのサンプルの応答を表示| |2|Graph Results|すべてのサンプル時間をプロットする簡単なグラフを生成| -アサーション用 |#|リスナー名|説明|h |1|Assertion Results(アサーション)|Assertionエレメントの結果を表示| |2|Comparison Assertion Visualizer|Compare Assertionエレメントの結果を表示| ***負荷テストのレポート用 [#nce1569e] リソースの消費量が小さいので、負荷テスト時に利用する。 |#|リスナー名|説明|h |1|Aggregate Report(統計レポート)|テストで異なる名前の要求ごとにテーブル行を作成する。| |2|Aggregate Graph|テストで異なる名前の要求ごとに棒グラフを生成し、PNGファイルを保存する。| |3|Summary Report|統計レポートと似ているが、メモリ使用量が少ない点が異なる。| |4|Response Time Graph|応答時間を、ラベル付きの要求毎に示す折れ線グラフに描画 | |5|Simple Data Writer|結果をファイルに記録(GUIには表示されない)| |6|Sample Result Save Configuration|結果ログファイル(JTL)に異なる項目を保存するように設定| ***その他 [#f5de9066] |#|リスナー名|説明|h |1|Save Responses to a file|テストの作成のために結果をファイルに記録| |2|Generate Summary Results|テスト実行の要約をログファイルおよび/または標準出力に生成| |3|Mailer Visualizer|失敗応答を受信するとメールを送る| |4|Backend Listener|BackendListenerClientのカスタム実装をプラグインできる非同期リスナー| *その他 [#dec31566] **Test Fragment [#f77e57b5] -スレッドグループまたはWorkBenchに配置できる。 -Include ControllerおよびModule Controllerとともに使用される。 ***Module Controller [#naf69640] Test Fragmentで代替テスト計画に迅速かつ容易に切り替えて実行。 ***Include Controller [#fc3d5c3c] 以下で作成した外部のJMXファイルをインクルードする。 -テスト計画の下にテストフラグメントを作成、 -その下に任意のサンプラー、[[ロジックコントローラー#k1b91458]]などを追加。 -次に、テスト計画を外部のJMXファイルに保存。 **Debug [#ge12214d] ***Debug Sampler [#u542b2f5] -すべてのJMeter変数および/またはプロパティの値を含むサンプルを生成。 -サンプルの値は、「結果ツリー・リスナー応答データの表示」ペインに表示される。 ***Debug PostProcessor [#acf01819] -以前のサンプラプロパティ、JMeter変数、プロパティおよび/またはシステムプロパティの詳細を含むサンプルを生成。 -サンプルの値は、「結果ツリー・リスナー応答データの表示」ペインに表示される。 **スクリプト [#zbc023e3] よくわかないが、以下の3つがあるもよう。 ***BeanShell(JSR-274) [#m2ecc7ee] ***Bean スクリプト・フレームワーク (BSF) [#l9e993cf] ***JSR-223 [#yb24cf7e] *参考 [#h196b41b] -Apache Jmeter入門~ https://net-newbie.com/jmeter/ -今さら聞けない Apache JMeter の基本~ https://qiita.com/aidy91614/items/d96ca0261665abc54f7d -Apache JMeter - User's Manual: Component Reference~ http://jmeter.apache.org/usermanual/component_reference.html ---- Tags: [[:テスト]], [[:ツール類]]