負荷テストツール選定のすすめ
はじめに
「ようやくリリースだ!」
「あれ?? 開発時は問題なかったのに、多くのアクセスが来るとエラーになってしまう...」
満を辞してリリースしたのに、性能問題が出たことはありませんか?
こうならないためにも、リリース前に負荷テストを行い、性能問題が起きないか確認しておくことは重要です。
ここでは案件先で負荷テストツールの選定を行ったので、簡単にまとめてみます。
様々なツールの紹介
Apache JMeter
昔からあるツールなので情報は沢山ある
プラグインも充実しており機能拡張も可能
実装言語はJava
Javaの実行環境が必要になる
シナリオはGUIで作成(XMLで出力可能)
Gatling
結果レポートがHTMLで作成される
実装言語はScala
シナリオはScalaで作成
v3.7からはJava, Kotlinにも対応
k6
2017年頃からリリースされた比較的モダンなツール
利用者も増えている印象
実装言語はGo
シナリオはJavaScriptで作成
vegeta
ドラゴンボールのベジータが元ネタ
CLIとしても、ライブラリとしても利用可能でシンプルさが特徴
簡単なものならコマンドラインだけで完結可能
実装言語はGo
シナリオはGoで作成
Locust
見やすいWeb UI
分散型でスケーラブル
実装言語はPython
シナリオはPythonで作成
自分達の選定基準
Pythonに慣れているメンバーが多いこと
特殊なプロトコルに対応できること
から自分達はLocustを選定しました。
特に2点目については選定基準として必須でした。
対象アプリのAPIとしてWebSocket APIが主であり、かつMessagePack-RPC となっていたためです。
Locustの場合、Pythonのモジュールを活用できるため、このようなプロトコルにおいても負荷をかけるシナリオを実装できました。
また分散型でスケーラブルなこともあり、負荷をかけるユーザー数が増えたとしても対応しやすいのも良い点でした。
今回は選びませんでしたが、個人的にはk6も使い勝手が良さそうに思ったので、またどこかで試してみたいです。
おわりに
負荷テストツールは今回紹介したもの以外にも多くあります。
どれを使っても負荷テストは実施できるはずなので、自分達なりの選定基準を決めて選ぶことが大切です。
また負荷テストツール選定以外にも、実施目的や結果の検証方法など考えることは沢山あります。
この辺りもどこかでまとめられると良いなと思います。