JMeterのリモートクライアントでログインするユーザを振り分けてテストする方法

リモートクライアントを使って負荷テストを行うってことは、とあるWebアプリケーションに対して同時に大量にアクセスさせて負荷を見たいって使い方になるんだと思います(少なくとも今やってる案件では)。
そのとき、ログインするユーザのIDやパスワードを「ユーザパラメータ」に全部書いてしまうと、リモート実行させるクライアント数 * ユーザパラメータに書いたユーザ数となってしまい、意図した同時アクセス数にならないことが判明。
で、どうやるのかなぁと調べた結果をメモメモ。

0.はじめに

1.ユーザを振り分ける準備

方法としては、ユーザのIDとパスワードを外部ファイルに定義し、JMeter がそれを参照してログインさせるようにする。外部ファイルはクライアント毎に用意し、そのクライアントからログインさせたいユーザのIDとパスワードを書く、という感じ。なるほどなるほど。

ただ、IDとパスワードは別々のファイルに書くらしいので、この場合は外部ファイルが2つになる。ちょっとめんどくさいけど、面倒なのは最初の1回だけなので。

外部ファイルを id, password とか適当な名前を付け、IDとパスワードを定義して JMETER_HOME/bin に作成する。今回は3クライアントなので、それぞれの環境に

が作成される。

2.JMETER側の対応

スレッドグループ、またはHTTPリクエストを選択 → 追加 → 前処理 → ユーザパラメータ として、ユーザパラメータを追加する。
ユーザパラメータに「ユーザの追加」と「変数を追加」して id とパスワードの枠を作る。カラム「名前」には、スクリプトから参照するテキトーな名前を付ければよい。カラム「ユーザー_1」には、${_StringFromFile(外部ファイル名)} を書く。今回はそれぞれ

  • ${_StringFromFile(id)}
  • ${_StringFromFile(password)}

となる。設定はこんな感じ。

名前 ユーザー1
id ${_StringFromFile(id)}
passwd ${_StringFromFile(password)}

あとは、HTTPリクエストにある「リクエストで送るパラメータ」欄に、↑で設定した名前を参照するように記述する。こんな感じ。(Encode?と等号含む?は省略)

名前
user_id ${id}
user_pw ${passwd}

3.テスト実行

クライアントの jmeter-server の実行、JMeterクライアントの設定、テスト実行は JMeterのリモートクライアントでテストする方法 - tomoyamkungの日記 の通り。
これでそれぞれのクライアントからは外部ファイルに定義したユーザのみアクセスすることになり、ユーザの振り分けを行うことができる。