11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jmeterで簡単負荷試験

Last updated at Posted at 2020-02-28

ダウンロード

https://jmeter.apache.org/download_jmeter.cgi に行きBinariesから解凍可能な形式のバイナリをダウンロードします。

起動

WindowsとMac, Linuxで少々違うようです。

Windows

ダウンロードした apache-jmeter-5.2.1(2020/2/28時点) ディレクトリを開きます。
binディレクトリ内の jmeter.bat をダブルクリックし起動してください。
GUIが開いたら起動完了です。

Mac, Linux

ターミナルを起動します。
ダウンロードした apache-jmeter-5.2.1(2020/2/28時点)に移動します。
bin/jmeter.shを実行します。
GUIが開いたら起動完了です。

負荷試験

さて本題です。
あるAPIに対しての性能試験をする事を想定してJmeterの設定をしていきます。
APIの定義をいくつかしておきましょう。

API定義

POST /api/v1/login

header
{
  "Content-Type": "Application/json",
}
request
{
  "username": "jmeter",
  "password": "apache"
}
response
{
  "token": "bhknFCZWaCDME1KhGz5wdbBx"
}

GET /api/v1/users

header
{
  "Authorization": "bhknFCZWaCDME1KhGz5wdbBx",
}
request
{}
response
{
  "users": [
    {
      "username": "Aさん"
    },
    {
      "username": "Bさん"
    }
  ]
}

シナリオ作成

/api/v1/loginでログインし、/api/v1/usersにアクセスすることにします。
/api/v1/loginでアクセストークンを取得し、そのアクセストークンを使って/api/v1/usersにアクセスします。

  1. スレッドグループを作成します。
  2. ログイン処理のために「一度だけ実行されるコントローラ」を追加します。
  3. /api/v1/loginのHTTPリクエストを追加します。
  4. HTTPリクエストに後処理を追加し、アクセストークンを抽出します。
  5. /api/v1/usersのHTTPリクエストを追加します。

画像を添付しつつ説明します。

1. スレッドグループを作成

「テスト計画」を右クリックし「追加」→「Threads(Users)」→「スレッドグループ」をクリックします。
スレッドグループ作成

2. ログイン処理のために「一度だけ実行されるコントローラ」を追加

「スレッドグループ」を右クリックし「追加」→「ロジックコントローラ」→「一度だけ実行されるコントローラ」をクリックします。
1度だけ実行されるコントローラ

3. /api/v1/loginのHTTPリクエストを追加

「一度だけ実行されるコントローラ」を右クリックし「追加」→「サンプラー」→「HTTPリクエスト」をクリックします。
追加できたら、追加した「HTTPリクエスト」を選択し内容を入力します。

プロトコル

httphttpsを入力します。(サーバーにあったものを入力してください)

サーバ名またはIP

ホストネームを入力します。

ポート番号

サーバーがバインドしているポートを入力します。

メソッド

HTTPメソッドを選択します。

パス

APIのパスを入力します。

Parameters

リクエストで送るパラメータ。いわゆるクエリパラメータ。
今回は定義に合わせて、usernamepasswordを含めます。

ログインHTTPリクエスト ログインHTTPリクエスト入力例

4. HTTPリクエストに後処理を追加しアクセストークンを抽出

ログイン処理のレスポンスにアクセストークンが含まれていますが、このままでは次のアクセスにアクセストークンを含めることができません。
レスポンスを抽出して保存する必要があります。

3で追加した「HTTPリクエスト」を右クリックし「追加」→「後処理」→「正規表現抽出」をクリックします。
追加した「正規表現抽出」を選択し内容を入力します。
それぞれの入力内容についてはこちらを参照ください。

参照名

抽出した値を呼び出すための名前。好きな名前でOKです。
今回はわかりやすくパラメータと同じ名前をつけています。

正規表現

抽出するパラメータの正規表現を入力します。()で囲っている部分を抽出します。

テンプレート

正規表現にマッチした値グループの内どれを使用するかを指定します。$n$でグループを選択する。先頭は1。

正規表現抽出 後処理入力例

5. /api/v1/usersのHTTPリクエストを追加

「スレッドグループ」を右クリックし「追加」→「サンプラー」→「HTTPリクエスト」をクリックします。
追加した「HTTPリクエスト」を選択し内容を入力します。
接続先情報は3と一緒ですので割愛します。
/apiv1/usersへアクセスするにはヘッダにアクセストークンを含める必要があるのでヘッダ情報を追加します。
「HTTPリクエスト」を右クリックし「追加」→「設定エレメント」→「HTTPヘッダマネージャ」をクリックします。
「HTTPヘッダマネージャ」を選択しパラメータを追加します。
今回は{Authorization: Token ${token}}を追加します。入力の仕方は画像を参照ください。

HTTPヘッダマネージャ HTTPヘッダマネージャ入力例

試験

負荷レベル

「スレッドグループ」を選択すると以下の項目が表示されます。

  • スレッド数
  • Ramp-Up期間(秒)
  • ループ回数
スレッド数

実行数。ユーザー数のように捉えたら良いです。
同時接続件数を指定する場合はここを調整します。

Ramp-Up期間(秒)

指定した秒数をかけてスレッドを立ち上げます。
例えば、スレッド数が5、Ramp-Up期間が5の時
1秒あたり1スレッドが実行されることになります。

ループ回数

名前の通りです。
このスレッドグループのシナリオを繰り返す回数です。

実行

▶︎ボタンを押してRunしましょう。

おまけ

「スレッドグループ」を右クリックし「追加」→「リスナー」→「統計レポート」を追加すると、シナリオのスループットやエラー件数のレポートを確認できるようになります。

参考

Jmeter簡易リファレンス http://sy5.sakura.ne.jp/jmeter/ref/postprocessors/regularexpressionextractor.html

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?