🤖

Postman Flow と Postman クラウド、変数の関係 まとめ

2025/03/03に公開

過去2回以下の記事でPostman Flowと変数の関係に触れてきました。
https://qiita.com/KameMan/items/0f1d2a0038322df08489
image.png
https://qiita.com/KameMan/items/fe9c0daa9ebb79e8b511
image.png

今日はそのまとめです。箇条書きにすると以下の通りです。

  1. Postman Flow はローカルとPostmanクラウド、2種類の実行環境がある。(ブラウザで動作していてもローカル環境扱い)
  2. 変数はコレクション変素、環境変数とグローバル変数がある。
  3. コレクション変数や環境変数はPostmanクラウドにFlowと同時にデプロイされる。ただし定数扱い。
  4. グローバル変数はPostmanクラウドにデプロイされないため認識されない

つまり変数を用いた動的な値の取り扱はPostmanクラウドでは行えないということです。一方PostmanではFlowの実行はPostmanクラウドを使うことを推奨しています。今日はPostmanクラウド上で動的な値を取り扱うベストプラクティスを紹介します。

まずはグローバル変数とPostmanクラウドの仕様再確認

今回も神サイトのRequestCatcherでテスト用APIを1つ作成します。

https://postman.requestcatcher.com/

次にグローバル変数を設定します。
image.png
次にコレクションを作成します。
image.png
この状態では当然グローバル変数を認識しています。
image.png

次にFlowを作成し、ローカルインスタンスで実行しても結果は同様にGlobal変数を認識しています。
image.png
このフローをPublishしPostmanクラウドから実行させます。
image.png
image.png
変数value1が認識されなくなっています。

値を変数として取り扱う方法

Postmanクラウドでは2つあります。一つ目はグローバル変数ではなくコレクション変数や環境変数を用いる方法です。これらはFlowのPublish時に同時にデプロイされます。ただし定数扱いとなることに注意してください。
もう一つはコレクションの変数を使う方法です。以下の通りコレクションのScriptsで変数を呼び出し時に設定可能です。
image.png
pm.environment.set("value1","testfromcollection")
この場合Postmanクラウドからの実行でも正しく値を認識します。
image.png
ここで設定された変数はローカル環境で実行してもグローバル変数より先に認識されます。認識される順でいえば、コレクション変数 > ローカル変数 > グローバル変数です。

注意点とブロック間の値の引き渡し

このコレクション変数方式は便利ですが汎用性が低いと言えます。例えば、単一のAPIに3つのテストシナリオがあるとします。この場合3種類のAPIコールをあらかじめ作成しておく必要があります。APIコールの結果により処理を分岐させさらに次のAPIコールを行う場合、さらに準備すべき数が爆発的に増加します。Flowにはせっかく様々な値の操作機能が準備されていますので、変数を使わずにこの機能を使うためにブロック間でダイレクトな値の引き渡し手法が準備されています。
やり方は簡単です。1つ目のAPIコールの結果がSuccess()に格納されますので、それをそのまま次にブロックに引き渡す際に以下の通り矢印を2つセットすることが出来ます。
image.png
この際値を受け取るvalue1は文字列を受け取るならStringと設定してしまいそうですが、ここは落とし穴です。Selectをせっていすることで値を受け取ったり、受け取った値がJSONであれば必要な要素を抜き出したりできます。
image.png

例えばこの通り受け取ったJSONをもとに要素を勝手に認識してくれていますので、GUIだけで必要な要素の取り出しを設定できます。

Discussion