【JMeter】負荷テストで JMeter を使ってみた
がっつりではないですが負荷テストというか並列で複数アクセスがあったときも大丈夫かを確かめるために JMeter を使うことになったので覚書です。
具体的な使用方法はもっと詳しい解説をしてくれている方がたくさんいるので説明しませんが、初期設定(案の定詰まったので)とテスト作成時に知りたかったけど特に書いてくれている方がいなかった点を記載します。
インストール
こちらからダウンロードしてきて展開するだけです。通常は Binary で大丈夫です。
Apache JMeter - Download Apache JMeter
起動前準備
Java のインストール
事前に Java 8 以降をインストールしておく必要があります。
Mac 版最新バージョンの Java のダウンロード方法は以下を参照してください。
Mac 用 Java の最新版ダウンロード方法 - ひでメモ
環境変数 JAVA_HOME の設定
Java がすでに入っている方は設定済みだと思いますが、私は今回で初めて導入したので設定しました。
export JAVA_HOME=`/usr/libexec/java_home`
公式ドキュメントにも設定するように書いてますね。
Apache JMeter - User's Manual: Getting Started
起動
展開した JMeter のディレクトリに移動して、ターミナル上で以下のファイルを実行すると GUI が立ち上がります。
$ ./bin/jmeter
テーマを変更する
バグがあってデフォルトのテーマだとファイルの保存ができず、レポートの出力やテストの設定などが保存できず実質何もできません。なんだこれは
Option > Look & Feel
からテーマを変更してから作業を始めましょう。
やったこと
複数端末からリクエストが1秒間隔で飛んでくるような状態を想定してテストを作成しました。
10台の端末から1秒間隔で10リクエスト、合計100リクエストです。めちゃくちゃ軽いですね。
おそらく通常のWebサービスであればもっと多いかと思いますが、今回私がテストしたサービスは端末の台数が限られているなどの条件があってこの程度で十分と判断しました。
設定時の小技
用語
設定時に便利だった機能を解説する前に簡単に用語を書いておきます。
Thread Group
スレッド数(同時接続する端末数)や設定したリクエストを何回送信するかなどの設定を行います。HTTP Request
どのURLにどんなパラメータでリクエストを送信するか設定します。
作成した Thread Group を右クリックしAdd > Sampler > HTTP Request
で追加します。
Thread Group の子の要素になります。
乱数をリクエストのパラメータで使用する
パラメータの値で乱数を使いたい場合以下のように変数を追加して、パラメータとして使用できます。
- Thread Group を右クリックし
Add > Config Element > Random Variable
で追加します。 - Variable Name を指定します。これが HTTP Request のパラメータの設定画面で指定する変数名になります。
- Minimum/Maximum Value で乱数の範囲を決めます。
- HTTP Request のパラメータの設定画面で
${hoge}
のようにして変数を埋め込む。
ちなみにですが、この変数は数値を指定しても単純にそのまま展開されます。
例えば以下のように書くと変数 hoge が 1~9 の乱数だった場合 10001~10009 の値を取ります。
スレッド番号をパラメータで使用する
複数スレッド = 端末 からのリクエストを投げる場合、スレッドごとにユーザIDを変えるといったことをやりたいことがあると思います。
そういう定数は定義されていて、${__threadNum}
(アンダースコアは2つです!)と書けば 1 から始まるスレッド番号を使用してくれます。
例えば、10スレッドで設定していた場合 1~10 になります。
このような jMeter の内部で持っている値や現在日時などはすでに変数が定義されており以下にその一覧があります。(ちょっとした式も埋め込めるみたいです)
jmeter.apache.org
感想
Java でできているのでUI的にちょっと使いづらいこともありますが、基本的な機能としては揃っておりかゆいところにも手が届くようになっているのではないかと思いました。
今回はログインが必要なシステムではなかったので試しませんでしたが、ログインしてから設定したリクエストを送信するといったようなこともできるようです。