【Gatling】負荷テストツールGatlingの概要と基本的な使い方

負荷テストツールの1つである「Gatling」の概要と基本的な使い方についてまとめてみました。

目次

Gatlingとは?

Gatlingとは、特に性能テストや負荷テストの分野で能力を発揮する強力なオープンソースツールです。

Scalaベースのアーキテクチャを採用しており、軽量でありながら大量のリクエストを処理することが可能です。

あわせて読みたい
Load testing designed for DevOps and CI/CD | Gatling Gatling is a load testing tool for web applications designed for DevOps and Continuous Integration. Try Gatling now!
Gatling公式サイト

Gatlingの特徴

次に、Gatlingの特徴を見ていきます。

1. 記述の容易さ

GatlingにはシナリオをScalaで記述するためのDSL(Domain Specific Language)が用意されいます。

そのため、プログラミング経験が少ない人でも比較的容易にシナリオを記述することが可能です。

2. 高い性能

GatlingはScalaとAkkaを使用して作られており、高いパフォーマンスを発揮します。

その結果、少ないリソースで大量のリクエストを処理することができます。

3. 豊富な分析とレポーティング

Gatlingは負荷テスト後に詳細なHTMLレポートを生成します。

これにはリクエスト/秒数や応答時間のパーセンタイル等の情報が含まれ、性能分析を行う上で非常に有用です。

Gatlingの基本的な使い方

次に、Gatlingの基本的な使い方についてです。

OpenJDKのインストール

GatlingはScalaによって書かれており、JavaVM上で動作します。そのため実行するにはJavaVMのインストールが必要です。

公式サイトからJDKをダウンロード、インストールできます。

以下のコマンドを実行し、Javaのバージョンが表示されていればインストール完了です。

java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

Gatlingのインストール

公式サイトからダウンロードし、解凍します。

デフォルトシナリオの動作確認

インストール完了後、解凍したフォルダに移動し、以下を実行します。

<Linux/Unixの場合>

bin/gatling.sh

<Windowsの場合>

bin/gatling.bat
GATLING_HOME is set to /~
Do you want to run the simulation locally, on Gatling Enterprise, or just package it?
Type the number corresponding to your choice and press enter
[0] <Quit>
[1] Run the Simulation locally
[2] Package and upload the Simulation to Gatling Enterprise Cloud, and run it there
[3] Package the Simulation for Gatling Enterprise
[4] Show help and exit

1を押してEnterを押すと以下の表示になります。

computerdatabase.ComputerDatabaseSimulation is the only simulation, executing it.
Select run description (optional)

さらにEnterを押すと実行開始です。

================================================================================
---- Global Information --------------------------------------------------------
> request count                                        100 (OK=97     KO=3     )
> min response time                                    205 (OK=205    KO=226   )
> max response time                                   2024 (OK=2024   KO=260   )
> mean response time                                   370 (OK=374    KO=243   )
> std deviation                                        334 (OK=338    KO=14    )
> response time 50th percentile                        242 (OK=241    KO=242   )
> response time 75th percentile                        304 (OK=307    KO=251   )
> response time 95th percentile                       1019 (OK=1026   KO=258   )
> response time 99th percentile                       2023 (OK=2023   KO=260   )
> mean requests/sec                                      5 (OK=4.85   KO=0.15  )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            84 ( 84%)
> 800 ms <= t < 1200 ms                                 10 ( 10%)
> t >= 1200 ms                                           3 (  3%)
> failed                                                 3 (  3%)
---- Errors --------------------------------------------------------------------
> status.find.in([200, 209], 304), found 502                          3 (60.00%)
> Select: Failed to build request: No attribute named 'computerU      2 (40.00%)
rl' is defined 
================================================================================

Reports generated in 0s.
Please open the following file: file://~/index.html

最後の行に実行結果を保存しているファイルのパスが記載されています。

このhtmlファイルをブラウザで開くと視覚的に実行結果を確認することができます。

独自シナリオの作成と動作確認

user-files/simulations/computerdatabaseに負荷試験のシナリオを定義したファイルを作成します。

今回はBasicSimulation.scalaという名前のファイルを作成し、そこに以下のシナリオを記載してみました。

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class BasicSimulation extends Simulation {

  val httpConf = http.baseUrl("http://yourwebsite.com") // ここにテストするWebサイトのURLを指定します

  val scn = scenario("Basic Scenario") // シナリオの名前を定義します
    .exec(http("request_1") // HTTPリクエストの名前を定義します
    .get("/")) // ここにエンドポイントを指定します

  setUp(
    scn.inject(atOnceUsers(100)) // 100ユーザーが同時にリクエストを送るシナリオを設定します
  ).protocols(httpConf)
}

再度コマンド(bin/gatling.sh または bin/gatling.bat)で実行します。

以下の表示が出たら先ほどと同じように1を押してEnterを押します。

Do you want to run the simulation locally, on Gatling Enterprise, or just package it?
Type the number corresponding to your choice and press enter
[0] <Quit>
[1] Run the Simulation locally
[2] Package and upload the Simulation to Gatling Enterprise Cloud, and run it there
[3] Package the Simulation for Gatling Enterprise
[4] Show help and exit

するとどのファイルを実行するか聞かれます。今回は自分で作成したBasicSimulationを確認したいので0を押してEnterを押します。

Choose a simulation number:
     [0] BasicSimulation
     [1] computerdatabase.ComputerDatabaseSimulation

以下が表示されますがそのままEnterを押します。

Select run description (optional)

すると。。。

================================================================================
---- Global Information --------------------------------------------------------
> request count                                        200 (OK=200    KO=0     )
> min response time                                    628 (OK=628    KO=-     )
> max response time                                  30999 (OK=30999  KO=-     )
> mean response time                                 14562 (OK=14562  KO=-     )
> std deviation                                      13644 (OK=13644  KO=-     )
> response time 50th percentile                      12670 (OK=12670  KO=-     )
> response time 75th percentile                      28156 (OK=28156  KO=-     )
> response time 95th percentile                      30240 (OK=30240  KO=-     )
> response time 99th percentile                      30577 (OK=30577  KO=-     )
> mean requests/sec                                  6.061 (OK=6.061  KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                             8 (  4%)
> 800 ms <= t < 1200 ms                                 92 ( 46%)
> t >= 1200 ms                                         100 ( 50%)
> failed                                                 0 (  0%)
================================================================================

無事に実行結果を確認することができました!

その他の負荷テストツール

Gatlingの他には、どんな負荷テストツールがあるのでしょうか?

JMeter

Apache JMeterはオープンソースの負荷テストツールで、主にWebアプリケーションに対する負荷テストを行うのに適しています。GUIによる操作性と多機能さが特徴で、プラグインを追加することでさらに多くの機能利用できます。

LoadRunner

Micro Focusが提供する商用の負荷テストツールで、大規模な負荷テストや性能テストに適しています。非常に高機能でありながらもユーザフレンドリーなGUIを備えており、多種多様なシナリオを作成し、実行することが可能です。

Locust

Python製のオープンソースの負荷テストツールで、非常にシンプルで拡張性の高い設計が特徴です。ユーザーの振る舞いをコードで模倣することで、現実世界のユーザーの挙動をエミュレートする負荷テストを作成することができます。

Artillery

Node.js製の軽量な負荷テストツールで、HTTP、WebSocket、Socket.ioを含む複数のプロトコルをサポートしています。シナリオはシンプルなYAMLまたはJSON形式で記述し、高いパフォーマンスを発揮します。

まとめ

以上、負荷テストツールGatlingについて簡単にまとめてみました。

他のテストツールとも比較しながら、対象システムや性能要求に応じて適切なツールを選択していきたいです。

参考

Qiita
Gatlingを使って負荷試験をする手順 - Qiita 概要Gatlingとは、負荷試験のためのテストツールです。社内ツールの負荷試験のために初めて使用したので、インストールからGatling実行結果を確認するまでの手順をまとめま...
よかったらシェアしてね!
  • URLをコピーしました!
目次