こちらは、アソビュー! Advent Calendar 2021の14日目の記事です。
お久しぶりです、アソビュー!でエンジニアをしている山内です。
皆様、12月いかがお過ごしでしょうか?
最近はグッと冷え込むようになったので、鍋をよく食べています。マイブームは、牡蠣チゲ鍋です。🤤
さて、今回は社内のアプリケーションの負荷テストを行う際に、Gatlingというツールを用いて行いました。
その際に、ポイントとなる観点や、学びがありましたので紹介できればと思います。
Gatlingとは?
Gatlingとは、JVM上で起動するオープンソースの負荷テストツールです。
テストのシナリオケースを作る際に、GUI上で作成できたり、テスト後のレポートを自動的にhtmlで出力してくれるといった特徴があります。
また、Scalaベースで書かれているため、独自にテストシナリオケースを記述することができます。
負荷テストの進め方とポイント
実際に負荷テストを行う際のポイントとなる部分を、負荷テストの進め方を通して紹介していきます。
1.目標値を設定
2.テストシナリオを作成
3.テストを実行
1. 目標値を設定
まずは目標値を設定します。今回の負荷テストの目的は何なのか、何を持って判定基準にするのかを明確にします。
一般的に、負荷テストを行うの目的は「想定されるユーザー分のアクセスに耐えうることの確認」になるかと思います。
想定されるユーザー分の負荷テストをして、システムが稼働し続けていれば問題はないはずですが、本当にそれだけで大丈夫でしょうか?
もしも、想定の2倍のアクセスが来たらどうなるのだろうか…
もしも、1分間だけ想定の3倍のアクセスが来たときには耐えられるのだろうか…
想定されるアクセスに耐えることを検証していても、実際のシステムの限界点を様々な視点から定量的に分析できていなければ、意味のないテストになっている可能性があります。
そのため、負荷テストの目標は、想定されるアクセスに耐えうることはもちろん、現在のシステムの危険領域・限界値の数値化をすることが重要になっていきます。
2. テストシナリオを作成
続いて、テストシナリオの作成を行います。
テストシナリオの作成方法は、実際のユーザーの行動に近いシナリオを作成していきます。
例えばアソビュー!であれば、TOPページを閲覧しているユーザー、検索をしているユーザー、予約をしているユーザー等々が想定できます。
それらのユーザー行動を列挙し、システム内の機能を網羅するように整理していきます。
ここでのポイントは実際のユーザーに近いシナリオの作成をすることです。
3. テスト実行
実際にシナリオからテストを作って、実行します。
私は、実行結果をスプレッドシートで管理しました。
シナリオごとの実行日時と、インフラ情報、実行の結果をまとめていきます。
このように実行の結果をすべて残すことで、前後の比較や限界値の可視化と、ログを見ることができます。
実行したあとに、分析 → 原因調査 → 修正 → 再度テスト実行を繰り返し行います。その際にも、すべてのログが1つの場所に正確に残っていることで、比較検討が容易になります。
実行時間も正確に残すことでアプリケーションログもわかりやすくなります。
テスト実行後のログの整理・管理も大事なポイントです。
おわりに
今回は、Gatlingで行った負荷テストを行う上でワタシ的に重要であった部分の紹介を行いました。
・ 目標は、現在のシステムの危険領域・限界値の数値化を定める。
・ シナリオは、実際のユーザーに近いシナリオの作成する。
・ テスト後のログの整理・管理を正確に残す。
負荷テストの手法によって重要になってくる点は異なるかと思いますが、今回のようなシステムの限界値等を明確にする耐久テストでは全て重要になってくるポイントだと思います。
これから負荷テストを行う方の参考になれば幸いです。
最後に
アソビューでは、エンジニアを大募集しております!
やりがいしか無いサービスの開発の興味がある方いればぜひ一度ご応募ください!