この記事はPostman Adventcalender 2024 12月14日の記事です。
Postman Collectionで設定するAPIコールにはスクリプト機能があり、JavaScriptによって動的にパラメータを指定することが可能になっています。
固定値であれば過去紹介した変数を用いた方が便利ですが、例えばAPIコール時の時間を挿入するなど、動的に定義しないといけない値の操作に用います。
Pre-Request と Post-Response
スクリプトを設定する箇所は2種類あります。Pre-Request
はリクエスト前のパラメータの操作、Post-Response
はレスポンスの文字列操作、になります。
いずれもpm
という環境変数に値が入るのでリクエストであればpm.request
,レスポンスであればpm.response
で操作可能です。
さっそくやってみる
ではいつも通りrequest catherをもちいて簡単なPOST APIコールを作成します。
次にスクリプトタブ
をクリックします。
Pre-Request
に以下のスクリプトをコピーして実行してみます。
// 任意のヘッダーを設定する(例えば Content-Type)
pm.request.headers.add({ key: 'Content-Type', value: 'application/json' });
// 現在時刻を取得(ISO形式)
const currentDate = new Date().toISOString(); // 例: 2024-12-25T12:34:56.789Z
// リクエストボディを設定(例: JSON形式)
const requestBody = {
name: "John Doe",
email: "john.doe@example.com",
timestamp: currentDate // 現在時刻を追加
};
// リクエストのボディを設定
pm.request.body.update({
mode: 'raw',
raw: JSON.stringify(requestBody)
});
// ログで確認
console.log("Pre-request Script executed, sending data:", requestBody);
動的にリクエストボディが生成され以下の値を受け取ることが確認できます。
{"name":"John Doe","email":"john.doe@example.com","timestamp":"2024-12-25T05:04:49.040Z"}
この例では以下の行でヘッダーを追記し
pm.request.headers.add({ key: 'Content-Type', value: 'application/json' });
以下の行でリクエストボディを追記しています。
const requestBody = {
name: "John Doe",
email: "john.doe@example.com",
timestamp: currentDate // 現在時刻を追加
};
// リクエストのボディを設定
pm.request.body.update({
mode: 'raw',
raw: JSON.stringify(requestBody)
});
ヘッダー
タブで以下のように別のContent-Type
を追記するとAppendされ出力は以下のようになります。
Content-Type: test, application/json
一方ボディ
タブの設定は以下のように指定してもスクリプトの内容によってUpdate(上書き)されます。
pm.request.headers.add
のようにヘッダーはadd
を用いるためappendされますが、m.request.body.update
のようにボディにadd
は存在せず、update
を用いる必要があるためです。
次にPost-Response
です。
// レスポンスをテキストとして取得
const responseText = pm.response.text();
// 現在時刻を取得(ISO形式)
const currentDate = new Date().toISOString(); // 例: 2024-12-25T12:34:56.789Z
// レスポンスの内容と現在時刻をログに出力
console.log("Response received at " + currentDate + ":", responseText);