Gatling を使った負荷テスト
先日Webサービスの負荷テストを行う際に、 Gatling というツールを使ったのでその概要をまとめておく。 ざっくり調べたことのまとめなので、間違い等あったら @__garsue__ に指摘してください。
負荷テストとシナリオ
そもそも僕は負荷テストというものが何かを知らなかった。 ググったところ JMeterを始め、いろいろな形式の負荷テストツールや負荷テストサービスがあるらしい。
いずれのツールもやることは基本的にHTTPリクエストを投げることなのだが、その内容や数など、シチュエーションに応じたリクエストを作らなければ負荷テストとして意味が無い。 そのシチュエーションを再現した一連のHTTPリクエストを「シナリオ」という。
負荷テストツールを選ぶ上で、どのようにシナリオを作るかという点が大きな選択基準となる、と思う。 その点に関して、今回触ったGatlingはなかなか秀逸だと感じた。
Gatlingの特徴
Gatlingの特徴はシナリオをScalaによる内部DSLで記述する点だ。 初見でもサンプルをそれなりに読み下せる。
JMeterのサンプルが比較対象として上げられているが、こんな長ったらしいXMLを見ると体調を崩すタイプの人間にはGatlingのDSLはかなりありがたい。
また、JMeter同様シナリオの自動生成もできる。やり方はJMeterと同様プロキシサーバを立ててそれ越しにWebサービスにアクセスし、HTTPのやりとりを記録する方法だ。 JMeterと比べた利点は生成されるシナリオを人が読める点だ。
生成されたシナリオは余計なリクエストや不要なヘッダを含んでいたりして、シナリオとしてそのまま使えるということはそう多くないと思う。 したがって、シナリオとして仕上げるためにはある程度編集が必要となる。
JMeterの場合はちまちまGUIから編集するか、場合によっては巨大なXMLをいじるはめになるのだろうが、Gatlingでは生成されるシナリオも比較的触りやすい形になっている [1] 。
シナリオを実行した結果のレポートもおしゃれで、大したこと無いテストでもなんだか一仕事した感を演出してくれる。 レスポンスタイムの最小・最大・平均だけでなく、標準偏差・P値まで出し、グラフによる可視化もこれでもかというぐらいやってくれる。
レポートに関しては他のツールがどんなものか分からないが、Gatlingのレポートで不足するシーンはめったにないだろう。
使用方法
公式ドキュメントに全て書いてあるので、そちらを読んでほしい。 https://github.com/excilys/gatling/wiki
英語だが、サンプルも多く使い方もシンプルなので、それほど難儀しないだろう。 Gatling 1とGatling 2があるが、2はまだ開発中とのこと。
不満
起動が遅い。JVMの起動とシナリオのコンパイルのせいか、起動からシナリオ実行まで結構もたつく。 シナリオ作成中にこまめに修正->実行をするのはそれほどスムーズではなかった。
最初は一からシナリオを手書きしていたが、あまりにももたもたしてストレスが溜まったので、結局Recoderで自動生成したものやや修正するだけにした。 そもそもそういった使い方を前提としているのかもしれない。
あとはcheckによるアサーションでリダイレクト先のURLの部分一致がほしいと思った。
脚注
[1] | なぜか文字列がヒアドキュメントの形式( """こんな感じ""" )にされるが。 |