Postman コレクションで構成するシナリオを、あの負荷試験ツール Gatlingで実行できるようになりました🚀
Gatlingとは、Webアプリ向けの負荷試験フレームワークです。テストシナリオをScala、Java、KotlinのDSLで記述できたり、実行結果のレポートを自動生成してくれます。また、JavaScript SDKによりJavaScript/TypeScriptを使用してAPIを呼び出すテストスクリプト(Cypressなど)を作成し、Gatlingをバックエンド負荷テストに使用する、といった柔軟な組み合わせが可能です。
今回のPostmanコレクションとの連携はJavaScript SDKを活用します。GatlingのJavaScriptプロジェクトにPostmanの連携パッケージを入れると、JavaScriptのSimulation用ファイルからコレクションを実行できるようになります。本記事ではGatling公式の本機能紹介記事を参考に、PostmanコレクションをGatlingで実行してみたいと思います。なお、GatlingはOSS版と商用版が提供されてますが、ここではOSS版を活用します。
事前準備
今回利用するパフォーマンステスト用のPostmanコレクション (PerformanceTesting.postman_collection.json
) を以下のいづれかの方法で用意する
GatlingでPostmanコレクションを実行
まずは、手っ取り早くJavascript SDK実行環境をcloneして、demoプロジェクト用ディレクトリ移動します。
git clone https://github.com/gatling/gatling-js-demo.git
cd gatling-js-demo/javascript
JavaScriptプロジェクトのディレクトリ構成は次のようになってます。
tree -L 1
.
├── node_modules
├── package-lock.json
├── package.json
├── resources
├── src
└── target
まずは、Postman連携用のgaltingパッケージをインストールします。
npm install --save "@gatling.io/postman"
つぎに、resources配下に上記事前準備で用意したコレクションファイルを配置します。
cp PerformanceTesting.postman_collection.json resources
tree -L 1 resources
resources
├── PerformanceTesting.postman_collection.json #<<<< これを配置
├── gatling.conf
├── logback-test.xml
└── search.csv
1 directory, 5 files
づづいて、次のようなSimulation用JSファイル (postman.gatling.js
) をsrcディレクトリ配下に配置します。ここでは負荷を抑えるため、constantUsersPerSecで毎秒1ユーザーを生成し、またduringで合計3秒間実行するように指定してます。
import
{ simulation, constantUsersPerSec }
from
"@gatling.io/core";
import
{ http }
from
"@gatling.io/http";
import
{ postman }
from
"@gatling.io/postman";
export
default
simulation((setUp) => {
const httpProtocol = http;
const collection = postman
.fromResource("PerformanceTesting.postman_collection.json");
const scn = collection.scenario("My Scenario", { pauses: 1 });
setUp(
scn.injectOpen(
constantUsersPerSec(1).during(3)
).protocols(httpProtocol)
);
});
それでは、上記のJSファイルで定義したSimulationを次のように実行します。
npx gatling run --simulation postman
実行結果は次のようになります。通常のGatlingの出力内容とほぼ同じです。
また、次のようなレポートも自動生成されます。
JavaScriptベースのプロジェクトの作り方にについて詳しくはこちらのページが参考になります。
OSS版の制限について
現時点(2024年12月現在)、OSS版はつぎのように、仮想ユーザー数5
まで、実行時間5分
までというかなりの制約があります。したがって、まともに負荷試験をするならばGatlingエンタープライズの利用が現実的です。こちらの紹介ブログからエンタープライズ無料お試しのリンクがあるので、興味のある方はエンタープライズで試してみてください。
GATLING POSTMAN TRIAL VERSION: POSTMAN plugin usage is limited, test will shut down when exceeding 5 virtual users or 5 minutes duration. Unlimited usage available on Gatling Enterprise: https://gatling.io/enterprise/.
さいごに
負荷テストには良質なシナリオ設定が必要ですが、そのシナリオ作るのが面倒です。Postmanはそのシナリオを敷居低く作ることができ、Postmanデスクトップアプリ限定はありますが同一ツールセット上からパフォーマンステストとして複数の仮想ユーザー数でシナリオを実行できます。しかし、2024年12月現在、この負荷機能はクライアントアプローチであるため大規模型の分散負荷試験のニーズには答えられないという課題がありました。これはとても大きな一歩だと思ってます。
さいごに、Postmanがネイティブでもつパフォーマンステスト機能の記事を置いておきます。大規模型ではなく、クライアントアプローチでカジュアルかつ小刻みにボトルネックを探りたいならばコチラがおすすめです。