2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostmanAdvent Calendar 2024

Day 17

Postmanコレクションを負荷試験ツールGatlingで実行する

Last updated at Posted at 2024-12-16

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秒間実行するように指定してます。

src/postman.gatling.js
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の出力内容とほぼ同じです。

Screenshot 2024-12-17 at 8.16.53.png

また、次のようなレポートも自動生成されます。

Screenshot 2024-12-17 at 8.17.44.png

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がネイティブでもつパフォーマンステスト機能の記事を置いておきます。大規模型ではなく、クライアントアプローチでカジュアルかつ小刻みにボトルネックを探りたいならばコチラがおすすめです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?