K6およびPostmanを使った負荷テスト実行

K6およびPostmanを使った負荷テスト実行

K6とは

Grafana K6は技術チームでの性能テストを簡単化・効率化するオープンソースの負荷試験ツールです。K6を用いることでシステムの信頼性と性能性をテストできると共に、障害やパフォーマンス低下を早期に発現できます。

K6を用いてテストシナリオを実装して実行することができますが、この記事では、既存のPostmanコレクションからのK6実行方法を説明させていただきます。その操作はかなり簡単です。既存のPostmanコレクションをエクスポートした後、K6テストに変換し、実行するぐらいです。

実現手順

  • K6インストール
  • Postmanのリクエスト作成・抽出
  • PostmanリクエストをK6テストに変換
  • K6テスト実行

K6インストール

以下の記事を参考に、K6をインストールします。

https://k6.io/docs/get-started/installation/

下記のコマンドを実行することでpostman-to-k6をインストールします。

npm install -g postman-to-k6

Postmanのリクエスト作成・抽出

Postmanにてロカールで負荷テストを実行するリクエストを作成します。作成したリクエストのすべてを同一コレクションに置いておきます。そのコレクションをエクスポートしてソースコードを含めるフォルダーに保存します。

Postmanで環境変数を使った場合においても、同様にエクスポートできます。
エクスポート後、二つのファイル(リクエストを含める「postman-requests.json」および、環境変数を含める「postman-env.json」)がプロジェクトフォルダーに生成されます。

PostmanのリクエストをK6テストに変換

下記のコマンドを実行することで、PostmanのリクエストをK6テストに変換します。

postman-to-k6 postman-requests.json -e postman-env.json --separate -o k6-script.js

環境変数を含めるファイルが存在していない場合、下記のコマンドを実行さえすれば良いです。

postman-to-k6 postman-requests.json --separate -o k6-script.js

上記のコマンドを実行した結果、「k6-script.js」が以下のように生成されます。

K6テスト実行

下記のコマンドを実行することでテストを実行します。

k6 run k6-script.js
上記のコマンドを実行した後、コンソールでテスト結果が表示されます。そこでリクエスト数、リクエスト数/秒、失敗リクエスト数といった集計結果を確認できます。
以下のoptions変数の設定値を変更することで同時利用者数やテスト時間を増減でき、他の条件も調整できます。
例:100名のユーザーが30秒で同時に使っているパターンのテストを実行します。
export let options = {
  scenarios: {
    contacts: { 
       executor: "constant-vus", 
       vus: 100, 
       duration: "30s" 
    }
  }
};

例:500名のユーザーが60秒で同時に使っているパターンのテストを実行します。
export let options = {
  scenarios: {
    contacts: { 
       executor: "constant-vus", 
       vus: 500, 
       duration: "60s" 
    }
  }
};

例:10名のユーザーが同時に使っている、かつ、1名ごとにリクエストを最大30秒で20回実行するパターンのテストを実行します。

export let options = {
  scenarios: {
    contacts: { 
       executor: "per-vu-iterations", 
       vus: 10, 
       iterations: 20, 
       maxDuration: "30s" 
    }
  }
};

その他に、目的により任意に変更できるパラメーターやシナリオがあります。詳細について以下の記事をご覧ください。
https://k6.io/docs/javascript-api/k6-http/params/
https://k6.io/docs/using-k6/scenarios/

default function()に入っているリクエストのすべてはテスト実行時、実施されます。あるリクエストをテストしたい場合、テストしないリクエストをコメント化することで対応できます。以下のコードをご覧ください。

PostmanのCollection Runnerと比較

PostmanのCollection Runner機能を使うことで負荷テストを実行することもできます。この機能を使う際、ライブラリーインストールやコード変換をすることなく、Postmanでリクエストを作成し、直接実行できます。また、IterationやDelayなどのパラメーターを変更することでテストシナリオを任意に編集できます。唯一の違いとしては、各テストシナリオを同時に実行できずに、テストシナリオの一つずつしか連続的に実行しません。また、そのテスト結果はK6のように詳しく集計されません。言い換えると、同時テスト実行や詳細集計が要らないのであれば、Postmanを選ぶことに越したことはありません。

参照元