• T, M T, M
  • — 1 month ago
負荷試験ツール「Gatling」を試してみた。【Windows 10 編】

仕事でGatlingという負荷試験ツールを聞いたので、実験がてらに触ってみる事に。

このツールの事を調べると、よくApache Jmeterより使いやすい、軽い、見やすいだのと比較されて説明されているのですが、さてさて。

最初の問題はまだ新しいのか、日本語のドキュメントが整理されてないご様子。 この時点でオールドタイプの私として戦略的撤退を具申したいのですが、悲しいけどこれ、仕事なのよね。

実行環境はとりあえずLinuxは面倒臭いので、Windows10を選択。
ローカルPCでパパっと確認したい。

なお、参考にしたのは下記のサイト
参考:https://qiita.com/haru_tp/items/e213a93f5b3a3cd3c96f

①まずはソースをダウンロード

とりあえずGatling本家の「 https://gatling.io/open-source/ 」からダウンロード
※私が落とした時点ではバージョンは3.3.1 (gatling-charts-highcharts-bundle-3.3.1-bundle.zip) でした。

②Gatlingの実行

「D:\gatling-charts」にダウンロードしたソースを解凍し、「gatling-charts\bin」直下にある「gatling.bat」を実行

当然の如くエラー!

GATLING_HOME is set to "C:\Program Files\gatling-charts"
JAVA = "java"
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
続行するには何かキーを押してください . . .

この手のサーバ系のツールはただ入れるだけだと、まずまともに動かない。メンドクサイ! 実行環境を整えてあげないといけません。

私的にはこの時点で、素人お断りって言ってるようでなんだかなと思います。 まぁ、フリーなので仕方がないとは思いますが・・・

ドキュメントも英語な時点で私にはチンプンカンプンです。 日本での普及を目指してる訳ではないでしょうから仕方ないでしょうが。

本家のインストールマニュアルをWeblio翻訳で翻訳しますが、さっぱりです。
翻訳能力がまだ低い、というか専門のページなんてまともに翻訳できないと思います。

とりあえずエラーメッセージでググるとJDKを入れろって事でしょう。

一応本家のサイトにも説明が書いてました。・・・機械翻訳だとこんな感じ。まぁ読めなくもない…読めなくはないけど、ねぇ・・・

ガトリングを立候補させるために、あなたは、JDKをインストールしておく必要があります。
ガトリングは、少なくともJDK8を必要とします。それから、あなたが最新のバージョンを使うことをおすすめします。

③JDKのインストール

とりあえずJDK本家の「 https://www.oracle.com/java/technologies/javase-jdk14-downloads.html 」に行って最新版をダウンロード
※日本語版のページから落としに行くとユーザ登録的な手続きが必要でメンドクサイので、英語のサイトから落とす。

インストーラーは一杯あって紛らわしいのですが、Windows10なので、「Windows x64 Installer」を選択。 落とした「jdk-14.0.1_windows-x64_bin.exe」を何も考えずにインストール。

さぁ、これでGatlingを実行だ! 当然の如く②のエラー!メンドクセェ!

・・・どうやら入れるだけだとダメらしくPATHを通さないといけないらしい。 インストーラーでその辺りしといて欲しいんだが、セキュリティのせいか何故か出来ない。気が利かない!天下のOracleだろ! ダラシネェな!オィ!

しぶしぶ下記のサイトを参考にPATHを設定する。
参考:https://eng-entrance.com/java-install-jdk-windows

④再度実行

とりあえずこれで動くかを確認。

再び「gatling-charts\bin」直下にある「gatling.bat」を実行
もにょもにょとしたログの後に、下記の内容が表示。どうやら動いているようである。

Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05

とりあえずサンプルを動かしたい。って事で「0」を押下しEnter!
「Select run description (optional)」と表示されたら、再びEnter!

これで、BasicSimulationに定義された負荷試験シナリオが実行されるらしい。
※BasicSimulationは「gatling-charts\user-files\simulations\computerdatabase」以下にあるデフォルトのシナリオとの事。

結果は下記の通り。

---- Global Information --------------------------------------------------------
> request count                                         37 (OK=35     KO=2     )
> min response time                                     46 (OK=46     KO=91    )
> max response time                                   1205 (OK=1205   KO=100   )
> mean response time                                   173 (OK=177    KO=96    )
> std deviation                                        293 (OK=300    KO=5     )
> response time 50th percentile                         73 (OK=68     KO=96    )
> response time 75th percentile                         91 (OK=88     KO=98    )
> response time 95th percentile                       1084 (OK=1088   KO=100   )
> response time 99th percentile                       1172 (OK=1174   KO=100   )
> mean requests/sec                                   9.25 (OK=8.75   KO=0.5   )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            32 ( 86%)
> 800 ms < t < 1200 ms                                   2 (  5%)
> t > 1200 ms                                            1 (  3%)
> failed                                                 2 (  5%)
---- Errors --------------------------------------------------------------------
> status.find.in(200,201,202,203,204,205,206,207,208,209,304), f      2 (100.0%)
ound 400

Htmlでの結果は[gatling-charts\results\recordedsimulation-[実行日時]」のディレクトリのindex.htmlに 出力されているので見てみると下図のようになってます。

⑤独自シナリオを組んでテスト

とりあえず、サンプルが動いたら次は簡単にテストURLを実行するシナリオを作成して試してみる。

とりあえず、参考サイトを元に「gatling-charts\user-files\simulations\computerdatabase」に「SampleSimulation.scala」という名前でファイルを作成。内容の下記の通り。

これはテストで作った「 http://localhost:8080/test 」に対してGETリクエストを5秒間10ユーザが投げ続けるシナリオです。

package computerdatabase

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

class SampleSimulation extends Simulation {

  val httpProtocol = http
    .baseUrl("http://localhost:8080/test") // Here is the root for all relative URLs
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // Here are the common headers
    .doNotTrackHeader("1")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .acceptEncodingHeader("gzip, deflate")
    .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0")

  val scn = scenario("Sample Scenario")
    .exec(http("request_1")
      .get("/")
      .check(status.is(200)))

  setUp(
    scn.inject(rampUsers(10) during(5 seconds)) .protocols(httpProtocol)
  )
}

再び「gatling-charts\bin」直下にある「gatling.bat」を実行

Choose a simulation number:
 [0] computerdatabase.BasicSimulation
 [1] computerdatabase.SampleSimulation   ← 作成したファイルが追加されてるので、これを選択
 [2] computerdatabase.advanced.AdvancedSimulationStep01
 [3] computerdatabase.advanced.AdvancedSimulationStep02
 [4] computerdatabase.advanced.AdvancedSimulationStep03
 [5] computerdatabase.advanced.AdvancedSimulationStep04
 [6] computerdatabase.advanced.AdvancedSimulationStep05

とりあえず実行してみる。

---- Global Information --------------------------------------------------------
> request count                                         10 (OK=10     KO=0     )
> min response time                                     46 (OK=46     KO=-     )
> max response time                                     83 (OK=83     KO=-     )
> mean response time                                    57 (OK=57     KO=-     )
> std deviation                                         11 (OK=11     KO=-     )
> response time 50th percentile                         54 (OK=54     KO=-     )
> response time 75th percentile                         60 (OK=60     KO=-     )
> response time 95th percentile                         78 (OK=78     KO=-     )
> response time 99th percentile                         82 (OK=82     KO=-     )
> mean requests/sec                                      2 (OK=2      KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            10 (100%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)

細かいパラメータはまだよくわかりませんが、とりあえず動いたという事で一旦は検証終了!
具体的な試験段階に入ったら、レスポンスからパラメータ受け取ったり、受け取ったパラメータでまた別のAPIを叩いたりと面倒なシナリオを作成する必要があるのですが、とりあえず叩く事に成功したのでこの時点では満足。

◆感想

軽く使った感想ですが、シナリオ作成では、GUIで視覚的に作れるJmeterの方が使いやすい気がしました。 GatlingでのシナリオもRecorderを使えば少しはマシかもしれませんが、結局手でごちょごちょしないといけないので、面倒なんではないでしょうか。

まぁ、目的はシナリオの作りやすさではなく負荷試験なので、実行時の負荷が重要で、その辺りが軽い(・・・らしいです)Gatlingの選択はありかもしれません。 でもそれ言っちゃうともっと早い「The Grinder」というツールも今はあるそうなので、ぶっちゃけ答えは出ない! ただ、Gatligは試験結果の見た目の評価も高いらしく、見た感じかなり見やすかったです。ただ、最近はJmeterも綺麗になってきてるので、そう大差はないかもしれません。

やってみた感じ、導入の手間はどっちもどっちであんまし変わらない気がしました。 短期間での結果を求められる場合は、素直に手慣れたツール使った方がいいと思います。

この手のツールは、シナリオ周りの作り方や、実行環境の構成等、覚えるのが多くてメンドイので、全くその手のツール触った事がない! って人はGatlingでいいんじゃね?って程度の認識が素直な感想でした。

T, M

System engineer

負荷試験ツール「Gatling」を試してみた。【Windows 10 編】

お気軽に
お問い合わせください。

お問い合わせ