なぜコマンドラインモードでTest Plansを実行するのか?
ロードテストをGUIモードではなくコマンドライン(CLI)モードで実行する主な理由は、後者がJMeterの機能を低下させる可能性があるためです。GUIを使用してテストを実行すると、追加のCPUおよびメモリを消費し、テスト結果に悪影響を及ぼす可能性があります。CLIモードの環境はテスト実行に最適な選択肢であり、Apache JMeterチームによって推奨されている方法論です。
コマンドウィンドウからテストを実行するのは少し古風かもしれませんが、それでも非常に効果的です。
事前テストチェックリストの確認
テスト時間を最も効果的に活用するために、事前テストチェックリストを利用することは良いテストプラクティスです。
推奨されるチェックリスト項目には以下が含まれます:
- 管理スタッフとロードテストの開始時間と期間を調整すること
- ArcGIS Enterprise Siteのユーザーや他の同僚への影響を最小限に抑えることを保証します
- 他の活動や使用によるsystem noiseがテスト結果を「汚染」するのを防ぐのに役立ちます
- 従来型(例:専用)のArcGIS Serviceをテストする場合、最小および最大インスタンスが適切に設定されていることを確認すること
- これはサービスから達成可能な最大スループットを理解しようとする場合に必要です
- 最大スループットの場合、一般的な目安として最大インスタンス数をCPUコア数に設定します
- 予測可能なパフォーマンスの場合、最小インスタンス数を最大インスタンス数と同じに設定します
- インスタンス数の調整はサービスの再起動を引き起こすため(計画的に行うこと)
- サービスの最小インスタンス数を増やすとArcGIS Serverマシンの物理メモリが追加で必要になります

- Test PlanにView Results TreeなどのListenerが含まれている場合は、GUIから無効にすることを確認してください
- Listenerが実行されているとテストクライアントのリソース消費が増加し、テストに影響を与える可能性があります

- Thread Groupのステップロードロジックとテスト期間を検証すること
- 特定の時間枠でスケジュールされている場合は、期待される長さでテストが実行されるよう設定されていることを確認してください
- ArcGIS Server Log LevelがDEBUGまたはVERBOSEに設定されていないことを確認すること。
- これらのログレベルは問題解決には役立ちますが、テスト対象サービスのパフォーマンスとスケーラビリティに影響を与える可能性があります
バッチスクリプト解説
Apache JMeterロードテストの実行にはコマンドラインが利用されるため、一連の操作や環境準備をバッチスクリプト(例:Windowsの*.batファイル)にまとめることは有利です。これにより再現性と保守性が向上します。
変数
変数を使うことはスクリプトの保守性向上に便利です。値をハードコーディングすることも技術的には問題ありませんが、特定アイテムへのパスが非常に長い場合は可読性が損なわれる可能性があります。以下セクションはバッチで利用する主な変数コンポーネントです。
メモリ
デフォルトではApache JMeter(バージョン5.4.1)は最小・最大ともに1GBメモリで動作します。これは古いマシンハードウェア上で単純なテストには十分ですが、一部のテストではより複雑なロジックや複数データファイルが必要であり、より多くのメモリが必要になる場合があります。そうしないとテスト結果に影響が出る可能性があります。
注:多くのロードテストはサーバーハードウェアのリソース使用率に焦点を当てています。しかし、テストクライアントの能力もボトルネックとなり、テスト目標達成能力を制限する場合があります。
デフォルトメモリ増加は以下で簡単にできます:
- set heap=-Xms4g -Xmx4g -xyz:MaxMetaspaceSize=256m
JMeterおよびプロジェクトパス
バッチスクリプトにApache JMeterおよびTest Planの場所を伝えたいです。
JMeter binフォルダへのパス設定は簡単です:
- set jmeterbin=C:\apache-jmeter-5.4.1\bin
(手動作成した)プロジェクトフォルダでjmxファイル(例:Test Plan)が存在する場所:
- set projectdir=C:\JMeter Tests\sampleworldcities3
拡張性向上のため、jmxファイル名用変数(拡張子なし)も作成しています。同じ名前でも別々に管理できます。
- set testname=sampleworldcities3
利便性向上として各実行時に付加される変数も作成しています。典型的なロードテストは複数回実行され、それぞれTest Plan内でわずかに異なるオプションが有効になる場合があります。これにより同じテストの異なる実行結果管理が容易になります。
テスト実行とスイッチ
上記変数のおかげで、Test Plan渡しによるJMeterコマンドライン実行はわずか数行で簡単に確認できます:
%jmeterbin%\jmeter -n -f -t "%projectdir%\%testname%.jmx" ^
-l "%projectdir%\results\results_%testname%_%runname%.jtl" ^
-j "%projectdir%\logs\debug_%testname%_%runname%.log" ^
-e -o "%projectdir%\reports\%testname%_%runname%" ^
- -n スイッチ JMeter をコマンドラインモードで実行します
- -t "path_to_jmx" スイッチ JMeter にファイルシステム上でjmxファイルの場所を指示します。
- -l "path_to_jtl" スイッチ JMeter にサンプルログ保存先(結果ファイル)を指示します。これはテストランで最も重要な成果物です。
- -j "path_to_log" スイッチ JMeter 実行ログ(例:環境情報)保存先指定。-e スイッチはテスト完了後レポート(ダッシュボード)生成指示です。
- -o "path_to_report_folder" スイッチ レポート(ダッシュボード)生成先指定。
- -f スイッチ 既存結果ファイルおよびレポートフォルダがあれば強制削除してから開始します。スクリプト内「runname」変数変更が各テストランごとの新規結果ファイル・レポート作成最も簡単な方法です。
- キャレット文字^ は「エスケープ」文字でWindowsバッチスクリプト内で次文字(改行)を通常文字として解釈させます。可読性向上に役立ちます。
まとめると
完全なバッチスクリプトは以下です:
echo off
rem Scripted JMeter Test Plan execution
rem Utilizing jmeter.bat for invocation
rem
rem 2021/06/07.1
rem
rem ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rem *** Variables ***
rem Set JMeter memory to min/max of 4GB (adjust based on your test client resources)
set heap=-Xms4g -Xmx4g -xyz:MaxMetaspaceSize=256m
rem Location of %JAVA_HOME%\bin (currently not used)
rem set javadir=C:\jdk-16.0.1\bin
rem Location of Apache JMeter bin
set jmeterbin=C:\apache-jmeter-5.4.1\bin
rem Location of JMeter Test Plan root folder (e.g. the folder where the Test Plan resides)
set projectdir=C:\JMeter Tests\sampleworldcities3
rem Name of the JMeter Test Plan (without the JMX file extension)
set testname=sampleworldcities3
rem String appended to results file of each test run
set runname=run1
rem ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo on
rem *** Test started ***
%jmeterbin%\jmeter -n -f -t "%projectdir%\%testname%.jmx" ^
-l "%projectdir%\results\results_%testname%_%runname%.jtl" ^
-j "%projectdir%\logs\debug_%testname%_%runname%.log" ^
-e -o "%projectdir%\reports\%testname%_%runname%" ^
rem *** Test completed ***
echo off
ロードテストの実行
初回または最初の複数回のテスト実行では、既に開いているコマンドウィンドウから実行することを推奨します。こうするとバッチスクリプト内コマンド呼び出し時に即座に問題があった場合、その内容が画面上に残り修正しやすくなります(例:タイプミス)。
- Windowsからはスタートクリック後cmd入力でコマンドプロンプトウィンドウ呼び出せます。
- このウィンドウ表示後、バッチスクリプトへのパス入力:
- "C:\JMeter Tests\sampleworldcities3\runMe.bat" と入力しEnterキー押下
- 設定された期間だけスクリプトが実行され、その後コマンドプロンプトへ戻ります
P

Pコマンドラインモードから実行すると コンソールにテスト実行のリアルタイム統計情報を提供します。このような機能は取得可能ですが、本記事では扱いません。<\/P>
テスト成果物<\/H1>テスト成果物とは、負荷テストから作成され、分析に使用できるアイテムのことです。レポートや生のテスト結果を含むJMeter Text Logs(JTL)ファイルなどのアイテムは、通常保持することが最も重要です。実行ログも有用であり、そのリストはテスト実行時の環境の構成メモリや、どのステップがいつ実行されていたかの更新を確認するために使用できます。同じテストを複数回実行し、スクリプトで異なるrunnameを使用した場合、多くのjtlファイルやレポートフォルダが溜まってしまうことがあります。ここで、プロジェクトフォルダを利用して管理するというテスト戦略に従うことが重要になります。<\/P>注意: JMeterによって生成されるレポートはHTMLおよびJavaScriptベースです。レポートの一部コンポーネントが空白であったり表示されない場合は、ブラウザのセキュリティ設定を調整するか、別のブラウザで開いてみてください。<\/STRONG><\/FONT><\/P>JMeter生成レポートの初期ページおよび時間経過による応答時間セクション<\/FONT><\/LI><\/UL>
<\/span><\/P>
<\/span><\/P>本記事で使用したApache JMeter Test Planのダウンロードはこちら: <\/SPAN>sampleworldcities3.zip<\/A><\/P>このテストにはJMeterにCustom Thread Groupsプラグインがインストールされている必要があります。<\/P>