Jmeter各種設定利用方法まとめ

IT

JMeterは性能試験において、ほぼ必須とも言えるツールです。ただ、数年に1回程度しか使わないため、毎回操作方法を忘れてしまい、調べ直す羽目になります。
そこで今回は、個人的によく使う機能を備忘録としてまとめておきます。

前提

以下の環境で動作確認を行っています。

oswindows11(4cpu、16GB)
Jmeter5.5
.NET8.0.304
IDEVisual Studio 2022 Community

変数の利用

ユーザー定義変数

HTTPリクエストでポート番号やパスなどの共通値を毎回入力するのは手間です。
そのようなときは変数として定義して使い回すのが便利です。変数を自由に定義できます。

Add > Config Element > User Defined Variables」を追加します。

使用時は${変数名}で参照します。

カウントアップ

1から順に数字をカウントアップしたい場合に便利です。デフォルトでCounterが用意されていますのでこれを利用します。「Add > Config Element > Counter」で追加します。

リクエストボディに設定して試します。なお、文字列(ダブルクォーテーション)の中でも展開可能です。API側でcountとnameプロパティをログに出して確認します。

最大値を設定すると、最大値に達した後は初期値から再スタートします。

ランダムな数値

Add > Config Element > Random Variable」で、ランダムな値を生成できます。

フォーマットも指定できます。以下の例では1~9の1桁のランダムな数値を生成しますが、フォーマットを指定すると最終的には「A03」のような出力になります。

埋め込み関数

事前設定なしで使える関数も用意されています。以下はよく使う関数の例です。

内容使用方法出力例
スレッド番号${__threadNum}1(スレッドグループのNumber of Threadsに対応)
時間${__time(yyyy/MM/dd hh:mm:ss,)}2025/04/27 03:09:16
ランダム数値${__Random(0,10)}3
ランダム文字列${__RandomString(5)}dgfbf
カウンター${__counter(False)}1(Falseを指定するとスレッド間で共有される)
UUID${__UUID()}10bc6464-959e-45e7-b54d-37b7b22657ad

TPS設定

性能試験で最も重要なのは、想定通りの負荷を出せるかどうかです。様々な方法がありますので、いくつかのパターンを紹介します。

○○tpsでx分間

まずはシンプルな設定例です。例として、「5 TPSで3分間負荷をかける」ケースを紹介します。

スレッドグループの設定

Number of Threads (users)5
Ramp-up period (seconds)30 ※この値は無関係
Loop Countinfinite
Duration (seconds)180

定数スループットタイマーの設定

Target throughput300.0
Calculate Throughput based on:all active threads (shared)

Target throughputは1分間の値を指定するので、60s × 5tpsで300となります。

これを実行すると、以下のように5tsで負荷をかけられます。

定数スループットタイマーに180を指定すれば3tpsを、420を指定すれば7tpsの負荷をかけることができます。

複数のAPIを実行する

性能試験では複数のシナリオを想定して負荷をかけます。目的に応じて様々な方法があります。

ランダムコントローラー

6 TPSで3分間」テストし、2つのAPIに3 TPSずつ分散させたい場合を想定します。

Add > Logic Controller > Random Controller」から追加します。そしてランダムコントローラーの下にHTTP Requestを2つ作成します。それぞれAPI1、API2を実行します。

以下のように概ね想定通りの負荷がかけられています。

ランダムコントローラーは完全な50%分散ではありません。
ざっくり分散できればOKという場面で有効です。正確な割合を求める場合は別の方法を使いましょう。

スループットコントローラーの利用

スループットコントローラーを使うことで、より柔軟に制御できます。ここでは全体で5tpsの負荷をかけます。その中で、API1に60%(3tps)API2に40%(2tps)の割合でリクエストを分散させることを想定します。

まずは5tpsになるよう定数スループットタイマーを設定します。詳細は割愛しますが、1分当たりのリクエスト数に300を指定します。そして次にスループットタイマーを2つ作成します。それぞれAPI1、API2用です。API1用の設定を以下に示します。Based onに「Percent Executions」、Throughputに「60(%)」を指定します。API2は40%を指定します。

別の結果も含まれていますが、FirstとSecondに着目すると、それぞれのAPIが想定する負荷で実行されています。

スレッドグループで分ける

先ほどまでは1つのスレッドグループの中で2つのシナリオを作成ました。今回はスレッドグループを2つに分けて、それぞれのグループごとに定数スループットタイマーで負荷を設定します。

この時、「Calculate Throughpu based on」の設定値を「all active threads in currrent thread group (shared)」にします。これでスレッドグループごとに任意の負荷をかけることができます。

こちらもそれぞれ想定する負荷がかけられています。

API間の連携

1つ目のAPI実行結果の値を2つ目のAPIのインプットにするための設定です。

JSON Extractor

JSON Extractorを利用することで、簡単にAPI間でデータを引き継げます。

APIの結果が以下のJsonであり、idを次のAPIに利用したいとします。

{
  "id": 0,
  "count": 0,
  "name": "test"
}

JSON Extractorは1つ目のHTTP Requestに「Add > Post Processor > JSON Extractor」から追加します。設定は簡単で、「JSPN Path expressions」に「$」を起点としてプロパティを「.(ドット)」でつなげる形で指定します。

抽出した結果は「Names of created variables」に指定した変数に格納されるので、「${id}」のように2つ目のAPIのリクエストボディに指定すればOKです。

Insertが1つ目のAPI、deleteが2つ目のAPIになります。

まとめ

JMeterは高機能ですが、操作がやや独特で忘れやすい部分も多いです。
本記事が、次回の性能試験時の助けになれば幸いです。

コメント