はじめに
k6で負荷試験用のスクリプトを作成する際に、負荷シナリオに対するテストをどう書けばいいものなのか、疑問が湧きます。
テストの方法として、単体テスト、結合テスト等、いくつかの方法があると思います。
その中でも、今回はモックAPIサーバを準備して、負荷シナリオに対するテストを行う方法を紹介します。
先に結論から
イメージ図は以下の通りです。

Mock API ServerをExpressを使って立てます。
各シナリオからは、実際のWebサーバではなく、Mock API Serverへアクセスします。
Mock API Serverはどんなエンドポイントが叩かれても、200 okを返却するAPIを用意します。
個別にMock APIのレスポンスを制御したい場合には、その都度APIを準備します。
なお、この構成で出来ること、出来ないことは以下の通りです。
- 出来ること
- k6のシナリオの動作の担保
- 出来ないこと
- k6内で定義した関数やモジュールの振る舞いの担保
- リクエスト先のAPIのレスポンスが正しいことの担保
シナリオを動かしても、エラーが起きないよね?程度の確認となります。
実際のMock API Serverの作成は、以下のPRが参考になります。
https://github.com/gonkunkun/k6-template/pull/2
Mock API Serverを立ててみよう
それでは実際にサーバを立てていきましょう。
ディレクトリ構成は以下をご参考にどうぞ。
https://github.com/gonkunkun/k6-template/
Mock API Serverを立てる
以下のようなpackage.jsonファイルを準備します。
そしたら、モジュール郡をinstallします。
srcディレクトリ配下にサーバの設定を追加します。
以下、src/index.tsを作成します。
これで、ルートの/*
に対するレスポンスを定義出来ました。
更に、将来的に複数のプロダクトがこのk6スクリプトを利用することを考慮して、プロダクト毎にエンドポイントを分けましょう。
これで、ルートの/sampleProduct
に対するレスポンスを定義出来ました。
上記のAPIはひたすら200 okのみを返却します。
例えば、/sample/test
に対するレスポンスを更に細かく制御したいという場合には、都度都度新しいAPIを追加してあげましょう。
Mock API Serverが完成したら、サーバを起動します。
試しにAPIを叩いてみます。
良さそうですね。
k6からMock API Serverを利用する
後は、k6実行時のエンドポイントをMockに向けるだけです。
サンプルアプリの中では.env
で環境変数を渡していますので、ここのエンドポイントを例えばSAMPLE_PRODUCT_ENDPOINT=http://localhost:3005
に修正してあげます。
https://github.com/gonkunkun/k6-template/blob/main/.env.sample#L4
あとはk6を実行するだけです。
これで、mock API Serverを利用して、シナリオを動作確認が出来ます。
わざわざ実サーバを立てなくても良い点が便利です。
おわりに
今回は、Mock API Serverを立てて、シナリオの動作の担保が出来るようにしてみました。
ここまで出来るようになると、次はこのテストをCIに組み込むことが出来ます。
以下の記事でその説明をしています。
興味があればご覧くださいませ。
