JMeterで負荷テストをする

実行環境

JMeterのインストールから初期設定

Javaのインストール

Javaがインストールされているか確認する。

PS C:\work> java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
PS C:\work>

インストールされていない場合は以下からインストールする。

https://www.java.com/ja/download/

JMeterのインストール

以下のサイトから「apache-jmeter-5.4.1.zip」をダウンロードして、任意の場所に展開する。

jmeter.apache.org

JMeterの日本語化

..\apache-jmeter-5.4.1\bin\jmeter.batをテキストエディタで開き、JMETER_LANGUAGEを変更する。

    set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"

    set JMETER_LANGUAGE=-Duser.language="ja" -Duser.region="JP"

JMeterの起動

..\apache-jmeter-5.4.1\bin\jmeter.batをダブルクリックする。

JMeterが起動して、メニューが日本語になっていればOK。

f:id:stmtk358:20211116080326p:plain

プラグインのインストール

以下から「plugins-manager.jar」をダウンロードし、..\apache-jmeter-5.4.1\lib\extに配置する。

jmeter-plugins.org

JMeterを起動し、メニュー > オプション > Plugins Managerを開く。

Available Pluginsから「jpgc - Standard Set」をチェックし、「Apply Changes and Restart JMeter」を押下する。

Response Times Over Timeなどのリスナーが追加されればOK。

f:id:stmtk358:20211117073313p:plain

Webサーバの用意

人様のサイトに負荷をかけるのはNGなので、Webサーバを用意する。

今回はSpring BootでWebアプリ作成する。

Spring Initializrからアプリを作成

以下からアプリの雛型をダウンロードして作成する。

https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.5&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=spring-boot&name=spring-boot&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.spring-boot&dependencies=web

コントローラの作成

package com.example.springboot;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

アプリの起動

Intellijの場合、Applicationクラスを右クリックし、「Run 'Application.main()'」を押下すれば起動する。

f:id:stmtk358:20211116094528p:plain

ブラウザから以下のURLにアクセスし、「Greetings from Spring Boot!」が表示されればOK。

http://localhost:8080/

テスト計画の作成

テスト計画の作成

任意の名前とコメントを入力。

f:id:stmtk358:20211117080143p:plain

スレッドグループの作成

テスト計画名を右クリックし、追加 > Threads > スレッドグループを選択。

「スレッド数」「Ramp-Up 期間(秒)「ループ回数」を入力し、「Delay Thread creation until needed」にチェックをつける。

f:id:stmtk358:20211117080201p:plain

HTTPリクエストの作成

スレッドグループを右クリックし、追加 > サンプラー > HTTPリクエストを選択。

プロトコル」「サーバ名」「ポート番号」「HTTPリクエスト」を入力。

f:id:stmtk358:20211117080224p:plain

結果をツリーで表示の作成

スレッドグループを右クリックし、追加 > リスナー > 結果をツリーで表示を選択。

f:id:stmtk358:20211117095356p:plain

実行

メニュー下の緑の三角アイコンを押すとテストを実行できる。

初回実行時はテスト計画の保存を求められるので、任意の場所に保存する。

「結果をツリーで表示」に実行結果が出力される。

f:id:stmtk358:20211117081421p:plain

テストの実行

JemeterのGUIボトルネックになる可能性があるため、正確にテストをする場合はCUIから行う。

JemeterのGUIを閉じた状態で、以下のコマンドを実行する

.\jmeter-n.cmd テスト計画ファイルパス
PS C:\work> cd C:\tools\apache-jmeter-5.4.1\bin
PS C:\tools\apache-jmeter-5.4.1\bin> .\jmeter-n.cmd .\シナリオ\サンプル.jmx
Creating summariser <summary>
Created the tree successfully using サンプル.jmx
Starting standalone test @ Wed Nov 17 07:25:58 JST 2021 (1637101558216)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +    596 in 00:00:01 =  400.3/s Avg:   460 Min:     1 Max:   980 Err:     0 (0.00%) Active: 4 Started: 599 Finished: 595
summary +   9404 in 00:00:09 = 1046.1/s Avg:     2 Min:     0 Max:   185 Err:     0 (0.00%) Active: 0 Started: 10000 Finished: 10000
summary =  10000 in 00:00:10 =  954.2/s Avg:    29 Min:     0 Max:   980 Err:     0 (0.00%)
Tidying up ...    @ Wed Nov 17 07:26:08 JST 2021 (1637101568991)
... end of run

テストの結果確認

実行結果はテスト計画名のjtlファイルに保存されている。

PS C:\tools\apache-jmeter-5.4.1\bin> ls シナリオ


    ディレクトリ: C:\tools\apache-jmeter-5.4.1\bin\シナリオ


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/11/17      8:17           4979 サンプル.jmx
-a----        2021/11/17      8:18        3822019 サンプル.jtl
-a----        2021/11/17      8:18        2772252 サンプル.log

JemeterをGUIで起動し、任意のリスナーを選択し、ファイル名を指定すれば結果が表示される。

f:id:stmtk358:20211117095118p:plain

参考文献

blackbird-blog.com

qiita.com

overworker.hatenablog.jp

spring.pleiades.io