👋

Postman を使ったシナリオ付き負荷試験

2025/03/09に公開

みなさんは、普通に生活していたら急に負荷試験手伝ってほしいと言われたことはありますでしょうか?私はあります!
お世話になっている人なので助けてあげたいな、と思う一方でよく使われるJMeterLocustを使ったことがないのでどうしようかな?と考えていました。

ちょうど開発者がPostmanを使ってAPIの挙動を説明されていたので、あれ?Postmanは負荷試験機能あるのかしら? と思って調べたら、ちゃんとありますね。素晴らしい。
https://qiita.com/yokawasa/items/c172f1765026bf90d3ac
この機能はPostmanのデスクトップアプリのみで利用可能です。もともとPostmanはデスクトップアプリからの利用を推奨しているので、興味がある方はこれを機にいれてしまいましょう。

ただこのテスト機能は連続的にAPIを呼び出すことはできるのですが、複数APIをシナリオにそって連続的に呼び出すことができないと思い考えていたらPostman Flowsでシナリオにそったフローを作成して起き、それをコレクションから起動したら、シナリオ付き負荷試験を行えることに気づきました。

さっそくやってみる

まずいつも通り神サイトrequestcatcherでテスト用APIを2つ作成します。
https://requestcatcher.com/

https://stresstest.requestcatcher.com/
https://success.requestcatcher.com/
とします。

そしてコレクションを2つ作成し、同じフォルダに格納します。負荷試験はフォルダ単位での指定になるので、2つを同じフォルダに入れます。

想定としてstresstestのレスポンスステータスコードが200であれば次のsuccessを呼ぶというものです。
コレクションを実行をクリックします。

10回の実行を指定します。


Delayを指定すれば呼び出しに適切な間隔を挿入できます。一度Run Stresstestをクリックして実行してみます。
以下のように実行結果が表示されます。

この状態では1個目のAPI呼び出し結果にかかわらず2個目も実行されます。 これについては後ほどFlowsを使った方式をやっていきます。
次にPerformanceタブをクリックします。

テストシナリオが指定可能です。

スパイクテストなら以下のようにシナリオをGUIで設定可能です。

実行をクリックしてテストを再度行います。
以下のようにテスト状況が出てきます。

正直これが無償で行えるのはすばらしいと思いました。ただし1点注意点です。このテスト通信はPostmanクラウドではなく、Postmanデスクトップアプリから出ています。つまりすべてのAPIコールのソースIPアドレスは同じです。WAFなどが入っている場合通信は止まる可能性が高いので、その場合WAFを外すか、専用負荷試験ツールをコンテナ化させてクラウドにデプロイするなどが必要になります。

Postman Flows を活用したストレステスト

上記でテストしたコレクションからの方式はあくまでしていされたAPIを呼び出すだけです。シナリオにそったAPIを作りこみたい場合Flowsを作ります。
例えば以下です。

この場合最初のAPIコールが成功した場合のみ次のAPIがコールされます。処理を分岐させたい場合以下のようにシナリオを作りこむことが可能です。

また以下のように途中でスクリプトを挿入し文字列操作や乱数生成などが可能です。

フローが作成出来たらWebhookを作成します。
https://5a5163c030f147d4a5c4b52132e6e3bf.flow.pstmn.io/
これをコレクションから呼び出す(POST)だけです。
FlowはPostmanクラウド上で実行されます。このため先程とIPアドレスが異なりますが、単一のIPアドレスからリクエストが出されます。さすがに無償ツールでIPアドレスの定期的な入れ替えまでは求めすぎというものですね。

Discussion