シリーズ総復習
8回にわたったシリーズの要点を振り返ります。
01
JMeterとは
Apache Software Foundation が開発するオープンソースの負荷・パフォーマンステストツール。HTTP / JDBC / FTP など多プロトコルに対応。Gatling・k6 などのモダンツールとの違いも確認した。
02
環境準備
JDK 11+ のインストール確認・JMeter のダウンロードと展開・GUI起動・CLIコマンドの確認。JVM ヒープ設定(
-Xms / -Xmx)のカスタマイズも行った。03
GUIの基本操作
メニュー・ツールバー・テストプランツリー・設定パネルの4エリア構成。Thread Group / Sampler / Listener / Config Element / Timer / Assertion / Pre・Post Processor の種別と役割。
04
テストシナリオ作成
スレッドグループ(スレッド数・ランプアップ・ループ)の設定。HTTP Request Defaults で共通設定を一元管理。Response Assertion でステータスコードを検証。CSV Data Set Config でパラメータ化。Constant Timer で Think Time を再現。
05
リスナー設定
View Results Tree(デバッグ用)・Summary Report・Aggregate Report(パーセンタイル付き)・Simple Data Writer の役割の違い。JTL ファイルへの保存とリスナーの配置階層による収集範囲の違い。
06
テスト実行
GUI モードはデバッグ向け・CLI モードが本番テストの推奨。
-n -t -l -e -o オプションで CLIから JTL 保存 + HTML レポート生成。実行前チェックリストの重要性を確認した。07
結果の読み方
スループット・平均応答時間・パーセンタイル・エラー率の意味。HTML ダッシュボードレポートの APDEX・Over Time グラフの見方。エラー種別と原因の切り分け方・ボトルネック特定のアプローチ。
実践でのベストプラクティス
| カテゴリ | ベストプラクティス |
|---|---|
| シナリオ設計 | 本番トラフィックのアクセスログを参考に、URL の比率・ランプアップ期間・Think Time を現実的な値に設定する |
| テスト実行 | 本番負荷テストは必ず CLI モードで実施。View Results Tree は無効化してから実行する |
| 結果管理 | JTL ファイルを日付付きのディレクトリに保存し、改善前後の比較ができるようにする |
| 繰り返し実行 | テストは同じ条件で最低3回実行して平均を取る。1回の結果だけで判断しない |
| テスト計画 | 目標値(SLA)をあらかじめ設定してから実施する。「何を持って合格とするか」を明確にする |
| バージョン管理 | .jmx ファイルと CSV データを Git で管理する。チームで同じシナリオを共有・再現できるようにする |
発展トピック
基本を習得したら、次のトピックを学ぶことでより高度な負荷テストが実施できるようになります。
分散テスト
1台の JMeter では限界のある負荷を、コントローラー + リモートサーバー(Slave)構成で複数マシンから発生させる機能。数千〜数万スレッドのテストに対応。
CI/CD 統合
Jenkins・GitHub Actions などのパイプラインに JMeter を組み込み、デプロイのたびにパフォーマンスを自動計測する。閾値超過でパイプラインを失敗させることも可能。
Grafana 連携
Backend Listener で InfluxDB にメトリクスを送り、Grafana でリアルタイムダッシュボードを構築する。テスト中のスループット・応答時間をライブ監視できる。
JMeter Plugins Manager
公式の Plugins Manager からサードパーティ製プラグイン(ステップ負荷タイマー・Throughput Shaping Timer など)を追加できる。より細かい負荷制御が可能になる。
Groovy スクリプト
JSR223 Sampler・Pre/Post Processor で Groovy スクリプトを実行し、認証トークンの動的取得・複雑な条件分岐・レスポンス値の加工などを実装できる。
HTTPS/OAuth 対応
HTTP Header Manager・HTTP Authorization Manager・JSON Extractor を組み合わせて、JWT や OAuth2 トークンを動的に取得・利用する認証フローのテストを実装できる。
分散テストの概要
1台の JMeter で生成できる負荷には限界があります(概ね 500〜1000 スレッド程度)。 それ以上の負荷が必要な場合は分散テストを利用します。
分散テストのアーキテクチャ:
- Controller(マスター): テストプランを配布し、リモートサーバーを制御するマシン
- Remote Server(スレーブ): 実際に負荷を発生させる JMeter エージェントを起動するマシン
# jmeter.properties の remote_hosts に Slave の IP を指定
remote_hosts=192.168.1.10,192.168.1.11,192.168.1.12
# 全リモートサーバーを使って実行
jmeter -n -t test-plan.jmx -r -l results/result.jtl -e -o results/report/
CI/CDへの統合
GitHub Actions でのパフォーマンステスト自動化の例を紹介します。
name: Performance Test
on:
push:
branches: [main]
jobs:
jmeter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Download JMeter
run: |
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz
tar -xzf apache-jmeter-5.6.3.tgz
- name: Run JMeter Test
run: |
mkdir -p results/report
apache-jmeter-5.6.3/bin/jmeter \
-n -t tests/load-test.jmx \
-l results/result.jtl \
-e -o results/report/
- name: Upload Report
uses: actions/upload-artifact@v4
with:
name: jmeter-report
path: results/report/
✅ 閾値による自動的なテスト失敗
JMeter のプロパティ jmeter.reportgenerator.apdex_satisfied_threshold や Automation Plugin を使って、APDEX スコアやエラー率が閾値を超えた場合にパイプラインを失敗させることができます。これにより「パフォーマンスが劣化したままデプロイされる」リスクを防止できます。
参考リソース
JMeter をさらに深く学ぶための公式リソースを紹介します。
| リソース | URL | 内容 |
|---|---|---|
| Apache JMeter 公式ドキュメント | jmeter.apache.org/usermanual | 全機能のリファレンス。日本語訳はないが英語でも比較的読みやすい |
| JMeter Plugins Manager | jmeter-plugins.org | 追加プラグインの一覧・インストール方法 |
| JMeter Academy(Blazemeter) | blazemeter.com/jmeter | ユースケース別チュートリアル・クラウド実行サービス |
💡 シリーズ完了おめでとうございます
全8回のシリーズを通じて、JMeter の概念・環境構築・GUI操作・テストシナリオ作成・リスナー設定・CLI実行・結果分析まで、負荷テストの基礎を習得しました。 次は実際のプロジェクトに適用し、さらに分散テストや CI/CD 統合などの発展トピックに挑戦してみてください。