Postmanのテスト実行オプションとそれぞれの実行場所 (ローカル or クラウド)と注意点について

Postmanを活用したテストには複数の実行オプション（機能・サービス）があるが、実行オプションによってテスト実行場所（ローカル実行なのか、クラウド実行なのか、など）に違いがある。

次のイメージに、５種類のPostmanテスト実行オプションとそれぞれの実行場所とユースケースを整理している。

![Screenshot 2024-10-08 at 17.35.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/afc611f4-2cc0-14a1-c7da-4167369ef411.png)


:::note 
ブラウザアプリからの実行における例外
**Postmanブラウザアプリ** からリクエストを手動送信する場合、エージェントを指定することになるが、**クラウドエージェント** を選択した場合、例外的にPostmanクラウドを経由したリクエスト送信になる。
なお、デスクトップアプリの場合は、ローカル、すなわちアプリインスタンスの実行環境からのリクエスト送信となる。
:::

# テスト実行オプションと実行場所

### (1) APIリクエスト１つずつ手動送信

PostmanアプリからのAPIリクエストを１つずつ手動実行するパターン。

![Screenshot 2024-10-08 at 18.10.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/1ad04d4c-824b-567e-6efd-29764e6c49fa.png)


上述のとおり、ブラウザアプリからの実行で、クラウドエージェントを利用する場合は、例外的にPostmanクラウド経由のリクエスト送信となることに注意。

![Screenshot 2024-10-08 at 18.10.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/6e977f5f-586b-8419-1970-6444847edbe7.png)

### (2) コレクションランナー（手動実行）

コレクションやフォルダーのAPIリクエスト群のテストをまとめて実行するコンポーネント。コレクションランナーには下記の実行タイプがあるが、Functionの手動実行とパフォーマンステストの場合はローカルからの実行となる。

- Functional: 機能テスト（手動 or スケジュール実行）
- Performance: パフォーマンステスト 

ただし、上述のとおり、ブラウザアプリからの実行で、クラウドエージェントを利用する場合は、例外的にPostmanクラウド経由のリクエスト送信となることに注意。

![Screenshot 2024-10-08 at 18.11.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/c6d19845-8eed-3a55-90e4-95294752b508.png)

コレクションランナーについて詳しくはこちらのページが参考になる。

https://learning.postman.com/docs/collections/running-collections/intro-to-collection-runs/

### (3) コレクションランナー(スケジュール実行) / モニター

コレクションランナーのFunctionのスケジュール実行パターンにおいては、Postmanクラウドからの実行となる。

また、モニターという監視・観測用コンポーネントでもコレクションテストをスケジュール実行するが、これもPostmanクラウドからの実行となる。

![Screenshot 2024-10-08 at 18.17.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/d8ce6eaa-2019-7dc8-a223-9169c8f9e8e6.png)

![Screenshot 2024-10-08 at 18.19.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/6957ef2c-78b7-10e2-3c7b-96260c295522.png)

モニターについて詳しくは下記ページが参考になる。

https://learning.postman.com/docs/monitoring-your-api/intro-monitors/


### (4) Postman CLI / Newman

Postman CLI / Newmanいづれも、コマンドライン・インターフェースであり、シェルやプログラム実行、CI/CD などの継続的自動実行に活用される。これらはローカル、コマンドライン実行環境からのリクエスト送信となる。

![newman-running-in-terminal.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/ddce22f6-67f9-9f86-d574-709ab098be8f.gif)

Postmanのコマンドラインインターフェースのオプションについて詳しくはこちらのページが参考になる。

https://learning.postman.com/docs/postman-cli/postman-cli-overview/

### (5) Webhook (コレクション/Postman Flows)

Webhook経由の実行には次の２つの種類がある。いづれも、Postmanクラウドからの実行となる。

(a) Webhook (コレクション): コレクションを Webhook 経由で実行可能にするカスタムエンドポイントからの実行。コレクションのカスタムWebhookエンドポイントについて詳しくはこちらのページが参考になる

https://learning.postman.com/docs/collections/running-collections/collection-webhooks

(b) Webhook (Flows): Postman FlowsのWebhookエンドポイント。なお、Posetman FlowsはPublish前であればローカルでの実行となることご認識ください。

![postman-flows-overview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/c80dbfaa-4ede-7aed-4284-c6cc6dc06375.gif)

Postman Flowsについて詳しくはこちらのページが参考になる。

https://learning.postman.com/docs/postman-flows/overview/

# クラウド実行パターンで気をつける点

### APIリクエスト送信元のIPアドレスレンジ（Postmanクラウドのレンジ）

PostmanクラウドからAPIリクエストが送信される場合、当然ながら送信元IPはPostmanクラウドのIPレンジのいづれかということになる。PostmanクラウドはAWS上に構築されているが、残念ながら特定の固定IPレンジでサービスを提供しているというわけではないので、もしどうしても固定のIPレンジで許可設定を行う必要がある場合は、広い範囲になるが、[AWS IPアドレスレンジ](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ip-ranges.html)を許可いただく必要がある。これについて詳しくは[こちら](https://support.postman.com/hc/en-us/articles/10667371814679-What-IP-ranges-does-Postman-use-to-send-requests)のページに詳細が書かれている。

この点について対象となるとは次の５つのシナリオである。

- ブラウザアプリからの実行で、クラウドエージェントからのリクエスト送信
- コレクションランナー(スケジュール実行) からの実行
- モニターからの実行
- コレクションのカスタムWebhookからの実行
- PublishされたPostman FlowsのWebhookからの実行

ただし、モニターについては例外があり、Postman Professional または Enterpriseプランをご利用の場合は、モニターは固定の静的IPをもつモニターがサポートされている。これについて詳しくは下記ページが参考になる。

https://learning.postman.com/docs/monitoring-your-api/using-static-IPs-to-monitor/


### 変数の初期値・現在値

まず、変数の初期値・現在値については下記記事の「初期値(Initial Value)と現在値(Current Value)」を読んで理解を深めていただくとして、ここではクラウド実行時における注意点だけを記載する。

https://qiita.com/yokawasa/items/05913df60aea07395903#%E5%88%9D%E6%9C%9F%E5%80%A4initial-value%E3%81%A8%E7%8F%BE%E5%9C%A8%E5%80%A4current-value

上記記事にも同樣のことが書いてあるが変数における初期値・現在値は次のイメージの部分を指す。

![Screenshot 2024-09-02 at 10.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/2e5648fe-2fae-7cb0-0153-92c27907fd37.png)

そして、初期値と現在値は保存のされ方が異なる。下記は、変数の初期値と現在値の保存場所を表したイメージとなる。

![Screenshot 2024-09-02 at 8.12.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/70ed7b38-dbd6-06df-e6ca-733987145be4.png)

初期値はPostmanクラウドに同期され、現在値は自分のローカルインスタンスにのみ保持され、実際にアプリ内での変数の参照で活用されるのは現在値となる。

一方、Postmanクラウドにおいては初期値と現在値は同じ値で保存される。これは、ローカルから同期された初期値が現在値にコピーされるためである（デフォルトの挙動として、保存時に現在値が空の場合、初期値の値がコピーされる）。上述のとおり、コレクションのスケジュール実行や、モニターからのコレクション実行はPostmanクラウドで行われる。クラウドで実行されるコレクションから参照される変数においてはローカルでの実行と同じく現在値が活用されるが、この現在値は初期値（ローカルから同期された値）と同じ値になっていることを認識しておく必要がある。

この点について対象となるとは次の４つのシナリオである。

- コレクションランナー(スケジュール実行) からの実行
- モニターからの実行
- コレクションのカスタムWebhookからの実行
- PublishされたPostman FlowsのWebhookからの実行