
APIのテストにPostmanを使えないか調べたときのメモ。ループで処理させたときのカウンタをどうするか悩んだけど、お風呂に入っているときに思いついた。お風呂すごい。
困ったこと
Postmanは言わずと知れたリクエストを簡単に送れるツール。たとえば、
- API:
https://daipresents.wordpress.com/api?user=dai
を投げて - 返ってきたレスポンスを確認したい
ときに以下のように使う。

{{user}}
で変数を使える。
Pre-request Scriptというタブでは、実行前のスクリプトをJavascriptで書ける。
Testsというタブでは、レスポンスのチェックを同じくJavascriptで書ける。Post-request Scriptみたいにも使える。
Postmanをつかって以下のようなフローを流したい。
- ログインする
- ログインしたユーザで購入する
- 購入を10回繰り返す
1と2はいいんだけど、3の「購入を10回繰り返す」が難しい。
Postmanは1リクエスト1レスポンスのやりとりはすごく得意。さらに、Runnerを使えば連続でAPIを叩くことも可能。

Runnerは繰り返しも可能。Iteration
に繰り返したい回数を入れれば繰り返してくれる。
ただ、繰り返しは、スクリプト単体かコレクションと呼ばれるスクリプトをまとめたフォルダごとに行えるっぽいので、先にも書いた
- ログインする
- ログインしたユーザで購入する
- 購入を10回繰り返す
3が難しい。123123123と実行はできるわけです。でも123333333・・・が多分できない。
調べてもいい情報が見つからなかったので、コレクションをわけて実行することにした。実行した各コレクションの結果をpostman.setEnvironmentVariable("key", "value");
に保存しておけば、データをキープできるので、次に実行するコレクションで使える!
これをふまえて以下のようなコレクションを作成。

めんどうだけど、
- 「000 SETUP」を1回実行
- 「001 LOGIN」を1回実行
- 「002 YOUR ACTION」を10回実行
とやればやりたいことができた。
POSTMANを使った初期化例

適当にリクエストを投げるコマンドの中で(投げ先はどこでもいい)、postman.setEnvironmentVariable()
を使って初期化。繰り返しで使いたいカウンター変数もここで初期化(0を設定)する。
設定した値をURLのクエリパラメタとして使いたい場合は、URLエンコードを忘れずに。
カウンタ変数をインクリメンタルする
以下、例。
https://gist.github.com/daipresents/fa87f871f6ec6a3bd83bdc101c40e7e3.js?file=counter1
Arrayに詰め込んだ文字列データをpostman.setEnvironmentVariable()
すると"aaa,bbb,ccc"
みたいな文字列になるみたいなので、environment.users.split(',')
が必要だった。
カウンタ変数(ここではcounter
)をとりだしてusers[counter]
とすればプログラミングっぽくデータアクセスできる。
https://gist.github.com/daipresents/fa87f871f6ec6a3bd83bdc101c40e7e3.js?file=counter2
カウンタのインクリメントはpostman.setEnvironmentVariable("counter", counter + 1);
で再設定すればOK。
TESTタブで tests["counter:" + counter] = true;
のように書けば、実行結果にログっぽく出力できるのも工夫したところ。