負荷テストツールの1つである「Gatling」の概要と基本的な使い方についてまとめてみました。
Gatlingとは?
Gatlingとは、特に性能テストや負荷テストの分野で能力を発揮する強力なオープンソースツールです。
Scalaベースのアーキテクチャを採用しており、軽量でありながら大量のリクエストを処理することが可能です。
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について簡単にまとめてみました。
他のテストツールとも比較しながら、対象システムや性能要求に応じて適切なツールを選択していきたいです。