読者です 読者をやめる 読者になる 読者になる

2017年版 負荷テストツールApache JMeter入門

前回、Tsungの構築方法についてご紹介しましたが
今回はApache JMeterを使ってみました.

概要

Tsungとの違い

インストー

ダウンロード

Apache JMeter - Download Apache JMeter
Binariesのapache-jmeter-3.2.zipをダウンロード

解凍

apache-jmeter-3.2.zipを適当なフォルダに解凍.
以下、apache-jmeter-3.2というフォルダが生成されているとして説明します.


シナリオ作成

起動

コマンドプロンプト

cd apache-jmeter-3.2/bin
jmeter.bat

こんな感じでGUIJMeterが起動します。
f:id:MSitter29:20170511125422j:plain

スレッドグループ

スレッドグループは、アクセスユーザ数やリクエスト発行時間を設定します.
テスト計画を右クリック > 追加 > Threads(Users) > スレッドグループ で追加.

  • スレッド数: リクエストユーザ数
  • Ramp-Up期間: シナリオ実行時間
  • ループ回数: シナリオ実行回数

例えば、スレッド数60, Ramp-Up期間60, ループ回数2だと
60秒の間に、60ユーザがリクエストを2度送る(60ユーザx2ループ÷60秒 = 秒間2リクエスト)ことになります.

ループコントローラ

ループコントローラは、配下のシナリオを何回実行させるか指定するコントローラです.
後述するインターリーブコントローラのためにここで追加します.
スレッドグループを右クリック > 追加 > ロジックコントローラ > ループコントローラ で追加.

インターリーブコントローラ

インターリーブコントローラは、直下のシナリオを1ループについて1つだけ順番に実行してくれます.
ループコントローラを右クリック > 追加 > ロジックコントローラ > インターリーブコントローラ で追加.

シンプルコントローラ

シンプルコントローラは、シナリオ作成者がわかりやすくまとめるためだけで、特別な役割はありません.
インターリーブコントローラを右クリック > 追加 > ロジックコントローラ > インターリーブコントローラ で「2個」追加.

1つ目のシンプルコントローラの名前を「HTML」、2つ目のシンプルコントローラの名前を「パーツ」と設定します.
f:id:MSitter29:20170511125630j:plain
ループコントローラのループ数を「2」と設定します.
これにより、インターリーブコントローラの役割どおり
HTMLシナリオが実行された後にパーツシナリオが実行され、ブラウザの挙動の近いシナリオを実現できました.

HTTPリクエス

HTTPリクエストは、httpやhttpsでGETやPOSTクエストを発行するシナリオです.
HTMLを右クリック > 追加 > サンプラー > HTTPリクエス で追加.
パーツを右クリック > 追加 > サンプラー > HTTPリクエス で何個か追加.

こういう感じで設定します.
localhostも指定可能です.
f:id:MSitter29:20170511125644j:plain
f:id:MSitter29:20170511125655j:plain
POSTも指定できます.
f:id:MSitter29:20170511125710j:plain
必要に応じてUse multipart/form-data for PSOTをONにしましょう.

また、Advancedタブでリクエストのタイムアウトも設定できます.
f:id:MSitter29:20170511125719j:plain
テスト時になかなかレスポンスが帰ってこなくて時間がかかりすぎる場合や
応答許容時間がある場合に指定するとよいでしょう.

アサーション

POSTの応答値をチェックした場合などに使います.
POSTリクエストを右クリック > 追加 > アサーション > アサーション で追加.
f:id:MSitter29:20170511125739j:plain
テストパターンに正常時のパラメータを指定しましょう.
この場合は、POST応答値に「"success":"true"」が含まれていたら正常となります.

統計レポート

統計レポートはテスト結果(jtlファイル)を読み込ませるか、GUI上テストした全体的な結果を確認できます.
テスト計画を右クリック > 追加 > リスナー > 統計レポート で追加.
f:id:MSitter29:20170511125823j:plain

結果をツリーで表示

統計レポートはテスト結果(jtlファイル)を読み込ませるか、GUI上テストした各リクエストの詳細内容を確認できます.
テスト計画を右クリック > 追加 > リスナー > 結果をツリーで表示 で追加.
f:id:MSitter29:20170511125831j:plain

結果を表で表示

統計レポートはテスト結果(jtlファイル)を読み込ませるか、GUI上テストした各リクエストの実行順番やバイト数を確認できます.
テスト計画を右クリック > 追加 > リスナー > 結果を表で表示 で追加.
f:id:MSitter29:20170511125838j:plain

保存

かならず最初の保存は、テスト計画にフォーカスを与えて保存しましょう.
(スレッドグループにフォーカスを与えてたりすると全部のシナリオが保存されないことがありました)
f:id:MSitter29:20170511125758j:plain

負荷テスト実行

テストはGUIからではなく、コマンドプロンプトから実行することが推奨されています。
実行コマンドは

jmeter.bat -n -t scenario.jmx -l ../result.jtl -e -o ../report

jmeter.batにシナリオファイル(scenario.jmx)と結果ファイル(result.jtl)とHTMLレポートフォルダ(report)を指定すればOK.

GUIテスト実行

テストの詳細な応答値を知りたい場合など、デバッグ的な用途としてGUIからもテストを実行できます.
f:id:MSitter29:20170511125856j:plain
GUIから実行すると「結果をツリーで表示」の「リクエスト」「応答データ」タブも確認することができます.

過負荷に耐えるWebの作り方 ~国民的アイドルグループ選抜総選挙の舞台裏 (Software Design plus)

過負荷に耐えるWebの作り方 ~国民的アイドルグループ選抜総選挙の舞台裏 (Software Design plus)